R中的匿名函数

koe*_*bro 2 r function

使用包含数字列PY的数据集w,我可以:

nrow(subset(w, PY==50))
Run Code Online (Sandbox Code Playgroud)

并得到正确的答案.但是,如果我尝试创建一个函数:

fxn <- function(dataset, fac, lev){nrow(subset(dataset, fac==lev))}
Run Code Online (Sandbox Code Playgroud)

并运行

fxn(w, PY, 50)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

eval(expr,envir,enclos)中的错误:找不到对象'PY'

我究竟做错了什么?谢谢.

flo*_*del 5

来自以下文件subset:

警告 这是一个便于交互使用的便利功能.对于编程,最好使用像[的标准子集函数,特别是参数子集的非标准评估可能会产生意想不到的后果.

这个相当模糊的警告在这里得到了很好的解释:为什么`[`比`子集更好?

最后一个字是你不能使用subset比其他交互方式像你正在尝试,尤其不要通过包装.您应该使用[:

fxn <- function(dataset, fac, lev) nrow(dataset[dataset[fac] == lev, , drop = FALSE])
Run Code Online (Sandbox Code Playgroud)

或者更确切地说:

fxn <- function(dataset, fac, lev) sum(dataset[fac] == lev)
Run Code Online (Sandbox Code Playgroud)