2012-07-18 10 views
3

首先,我不確定粘貼和打印之間有什麼區別。但我正在使用「print」來吐出通用語句並「粘貼」來吐出使用/引用特定變量的語句。粘貼和打印之間的區別(影響功能的結果)

我的問題是,當在一個函數中使用「粘貼」時,如果在「粘貼」語句之後的函數中包含任何東西,我會丟失粘貼的輸出。

請參閱下面的三個功能:

TS<-5 

實例1-一切正常

T<-function(){ 

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

else 

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

} 

例2-我的問題。如果我下面添加任何東西(在這種情況下,另外的打印命令)我的「如果」的聲明,我將失去我的貼輸出

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-同樣的語句放在之前的「如果」有沒有負面影響

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


} 

有人可以解釋與這個功能衝突的地方。更好的是如何解決它,所以我可以有一個粘貼語句,然後在一個函數中執行其他操作(基本上,我怎樣才能讓示例#2工作)。

布朗尼點 - (爲了視覺一致性)當使用「print.noquote」時,有沒有這樣的東西,像paste.noquote?

+1

使用'print','cat',或者更好的辦法是,'message'如果你想要文本被回顯。 'paste'僅用於連接字符串;如果它是沒有顯式返回值的函數的最後一個語句,它將作爲副作用被回顯。 – baptiste 2012-07-18 02:01:31

+0

@ttmaccer這不會導致隨機粘貼語句打印到控制檯。如果你在一個循環內部打印,這很有用...... – Dason 2012-07-18 02:49:49

回答

4

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

不知道最後一個例子應該顯示什麼。你能解釋一下嗎? – naught101 2014-07-09 12:40:03

3

paste將輸入連接在一起。當一個函數返回時,如果它沒有存儲到一個變量中,那麼返回的任何返回值都會打印出來。如果沒有顯式的「返回」或「不可見」語句,函數將返回最後一個頂級調用。

所有這些東西加起來就是你最終看到的東西。如果paste是最後一個被調用的函數,它最終會將輸入連接在一起 - 最終由函數返回 - 最終會被打印出來,因爲您不會將其保存到變量中。如果您明確要印刷的東西,最好使用printmessagecat - 它們各有不同的用途。

+0

+1擊敗了我,但是已經犯了太多的時間來寫入刪除。 – mnel 2012-07-18 02:09:30

相關問題