2012-06-17 84 views
2

我有一個簡單的腳本函數的返回,最後一行其中是調用函數使用「源」破壞功能

fun<-function(){ 
    readline("This is a test") 
    x<-c(4,5) 
    y<-c(5,6) 
    add<-x+y 
    sub<-x-y 
    return(list(add,sub)) 
} 

fun() 

如果我複製到我的[R控制檯這個我得到了什麼是預計

This is a test 
[[1]] 
[1] 9 11 

[[2]] 
[1] -1 -1 

但我一直在嘗試使用「源」來自動拉起我的腳本。如果我嘗試使用來源

source("/Users/Me/Desktop/R.test.R") 

我鬆了我的輸出。我仍然得到readline的,但我失去了返回的數據,所以我只是得到這樣的:

This is a test 

我仍然可以使用source命令來訪問我的功能,如果我刪除最後一行,然後手動鍵入「樂趣( )「

source("/Users/Me/Desktop/R.test.R") 
fun() 

但我想這是一步到位的交易。

有人可以解釋爲什麼「剪切和粘貼」與使用源代碼之間的區別,以及我如何使用源代碼在一個步驟中調用我的函數?

感謝

回答

4

當你默認調用print該對象上,以顯示其類的東西直接在控制檯中,R。但它只能在控制檯中直接進行。

當您撥打source時嘗試設置print.eval = TRUE。要看看發生了什麼,請使用以下腳本嘗試兩種方法:

fun<-function(){ 
    readline("This is a test") 
    x<-c(4,5) 
    y<-c(5,6) 
    add<-x+y 
    sub<-x-y 
    return(list(add,sub)) 
} 

fun() 

x <- 5 
x 

現在更清晰一點。只要在控制檯上輸入x就會導致R到print它。如果你在採購時想要這樣的行爲,你必須這樣說。