這裏有一些對於R評估器如何處理函數調用的基本知識的流利者來說有點困惑。假設我想編寫一個採用R語句的函數,與我在命令行編寫的語句相同,並將它和回聲結果進行回聲。例如:Verbatim命令參數:deparse(substitute(foo))在一個包裝器中
> p.eval(sum(1:3))
sum(1:3) --> 6
這很簡單;這裏有一個p.eval()
定義:
p.eval <- function(v,prefix="--> ") {
cmd <- deparse(substitute(v)); cat(cmd,prefix,v,"\n")
}
但是假設我現在想寫周圍p.eval的包裝,要調用的同樣的方式;也許作爲一個有點瘋狂的二元運算與虛擬第二個參數:
%PE% <- function(x,...) p.eval(x)
我想調用它像這樣:sum(1:3) %PE% 0
應相當於舊p.eval(sum(1:3))
。這當然不起作用,因爲p.eval()
的deparse(substitute())
現在給出x
。
對開明的問題:有沒有辦法讓這項工作符合我的願望?對於這個特殊的用法,我很好的通過複製/粘貼p.eval
的單行定義來定義%PE%
,所以這個問題主要是學術性問題。也許我會學習一些關於R評估者的基本知識:)
PS:爲什麼會發現上面的函數有用?假設我開發了一些分析代碼並通過org-babel非交互式地調用它(如果你是組織模式和/或Emacs用戶,這絕對值得玩)。默認情況下,org-babel會在解釋器中評估事物時輸出輸出。因此,如果我想獲得除原始數字之外的任何內容,我必須明確地構建要通過cat
或paste
打印的字符串,但是誰願意在通過分析進行飛行時這樣做?..上面的黑客可以簡單地追加%PE%0在想要打印的行後面,並將此命令回顯到組織輸出。
如果你走這條路,我建議閱讀的https:/ /github.com/hadley/devtools/wiki/Evaluation,特別是「從其他功能調用」部分 – hadley 2011-01-14 18:30:40
優秀的資源,哈德利。期待完成其他部分。 – 2011-01-14 22:38:39