我想寫一個自定義函數的包裝,它需要一些向量作爲輸入(如:mtcars$hp
,mtcars$am
等)將輸入作爲數據幀名稱(如data
參數,例如:mtcars
)和變量名稱(如:hp
和am
),如大多數標準函數一樣。`With`使用內部函數(包裝)
但我有一些問題,我提出了「演示」功能(大約mean
的包裝不起作用
代碼:
f <- function(x, data=NULL) {
if (!missing(data)) {
with(data, mean(x))
} else {
mean(x)
}
}
運行鍼對課程的載體作品:
> f(mtcars$hp)
[1] 146.69
但with
不幸失敗:
> f(hp, mtcars)
Error in with(d, mean(x)) : object 'hp' not found
雖然在全球環境/沒有我的自定義函數作品的權利:
> with(mtcars, mean(hp))
[1] 146.69
我試圖做一些實驗substitute
,deparse
和其他人,但沒有成功。任何暗示都會受到歡迎!
看看@Hadley Wickham的wiki文章:https://github.com/hadley/devtools/wiki /評估 – Andrie
它不應該是'f(hp,mtcars)'? – James
您可能想要探索的另一個選項是使用公式,因此您可以稍微區別它 - foo(〜hp,mtcars) - 然後使用像model.frame這樣的東西來獲取值。 – Spacedman