2012-09-16 94 views
2

使用DataSet瓦特,其中包括數字列PY,我可以這樣做:匿名函數中的R

nrow(subset(w, PY==50)) 

,並得到正確的答案。但是,如果我嘗試創建一個功能:

fxn <- function(dataset, fac, lev){nrow(subset(dataset, fac==lev))} 

和運行

fxn(w, PY, 50) 

我得到以下錯誤:

Error in eval(expr, envir, enclos) : object 'PY' not found

我在做什麼錯?謝謝。

回答

5

subset文檔:

Warning This is a convenience function intended for use interactively. For programming it is better to use the standard subsetting functions like [, and in particular the non-standard evaluation of argument subset can have unanticipated consequences.

這個默默無聞的警告是很好的說明如下:Why is `[` better than `subset`?

的最後一句話是,你不能subset以外交互,特別是使用,而不是像你正在嘗試的包裝。您應該使用[代替:

fxn <- function(dataset, fac, lev) nrow(dataset[dataset[fac] == lev, , drop = FALSE]) 

或者說乾脆:

fxn <- function(dataset, fac, lev) sum(dataset[fac] == lev) 
+0

我讀了鏈接頁面和哈德利的文件;仍然無法使其工作:( – koenbro