首先,我不确定粘贴和打印之间的区别是什么。但是我使用“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这样的东西?
答案 0 :(得分:6)
paste
连接(粘贴)字符串并返回一个字符向量,所以你可以做像
paste('a','b', sep = '-')
## [1] "a-b"
print
打印值。来自?print
invisible(x)
)。它是一个通用函数,这意味着可以轻松地为新类添加新的打印方法。
大多数类都有定义的打印方法(或将使用print.default
)
您可以通过键入
查看可用的打印方法methods('print')
在你的情况下
paste("TS= ", TS, sep=" ")
返回一个字符向量,所以当这是函数的结果时,print.character
用于显示结果
事实上,我认为您希望message
不是print
或print.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是最后一个被调用的函数,它最终将输入连接在一起 - 最终由函数返回 - 最终被打印,因为你没有将它保存到变量中。如果您明确要求打印某些内容,最好使用print
或message
或cat
- 它们的用途略有不同。