4

首先,我不太确定粘贴和打印之间的区别是什么。但我使用“打印”来吐出通用语句和“粘贴”来吐出使用/引用特定变量的语句。

我的问题是,在函数中使用时,如果在“ ”语句paste之后的函数中包含任何内容,我将丢失粘贴的输出。paste

请看以下三个函数:

TS<-5

示例 1- 一切正常

T<-function(){

if(exists("TS"))
{paste("TS= ", TS, sep=" ")}

else

if(!exists("TS"))
{print.noquote("No TS Values")}

}

示例 2-我的问题。当我在“if”语句之后添加任何内容(在本例中为另一个打印命令)时,我将丢失粘贴的输出

T<-function(){

if(exists("TS"))
{paste("TS= ", TS, sep=" ")}

else

if(!exists("TS"))
{print.noquote("No TS Values")}

print("my exsistance removes paste output") 

}

示例 3- 放在“if”之前的相同语句没有负面影响

T<-function(){

print("my exsistance does not remove paste output")

if(exists("TS"))
{paste("TS= ", TS, sep=" ")}

else

if(!exists("TS"))
{print.noquote("No TS Values")}


}

有人可以解释这个函数中的冲突在哪里。更好的是如何解决它,以便我可以paste在一个函数中使用一个语句,然后执行其他操作

基本上我怎样才能让示例 #2 工作。

布朗尼点-(为了视觉一致性)在使用“print.noquote”时,是否有 paste.noquote 之类的东西?

4

2 回答 2

8

paste连接(粘贴)字符串并返回一个字符向量,因此您可以执行以下操作

paste('a','b', sep = '-')

## [1] "a-b"

print打印值。从?print

print打印它的参数并不可见地返回它(通过invisible(x))。它是一个通用函数,这意味着可以很容易地为新类添加新的打印方法。

大多数类将具有定义的打印方法(或将使用print.default

您可以通过键入查看可用的打印方法

methods('print')

在你的情况下 paste("TS= ", TS, sep=" ")返回一个字符向量,所以当这是函数的结果时,print.character用于显示结果

事实上,我认为你message不想printprint.noquote

T <- function() {
    if (exists("TS"))
    {
        message(paste("TS= ", TS, sep=" "))
    } else if (!exists("TS")) {
        message("No TS Values")
    }
    message("my exsistance removes paste output") 
}
于 2012-07-18T02:08:39.620 回答
4

paste返回连接在一起的输入。当一个函数返回时,如果它没有存储到变量中,它会调用 print 任何返回的内容。如果没有明确的“return”或“invisible”语句,函数将返回最后一个顶级调用。

所有这些东西加起来就是你最终看到的东西。如果 paste 是最后一个调用的函数,它最终会返回连接在一起的输入 - 最终由函数返回 - 由于您没有将其保存到变量中,因此最终会被打印出来。如果您明确想要打印某些东西,最好使用printormessagecat- 它们各自的用途略有不同。

于 2012-07-18T02:04:32.003 回答