粘贴和打印之间的区别(影响功能的结果)

时间:2012-07-18 01:55:45

标签: r

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

我的问题是,在函数中使用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这样的东西?

2 个答案:

答案 0 :(得分:6)

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") 
}

答案 1 :(得分:4)

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

所有这些都是你最终看到的结果。如果paste是最后一个被调用的函数,它最终将输入连接在一起 - 最终由函数返回 - 最终被打印,因为你没有将它保存到变量中。如果您明确要求打印某些内容,最好使用printmessagecat - 它们的用途略有不同。