使用包含数字列PY的数据集w,我可以这样做:
nrow(subset(w, PY==50))
并得到正确答案。但是,如果我尝试创建一个函数:
fxn <- function(dataset, fac, lev){nrow(subset(dataset, fac==lev))}
并运行
fxn(w, PY, 50)
我收到以下错误:
eval 中的错误(expr、envir、enclos):找不到对象“PY”
我究竟做错了什么?谢谢。
从以下文档subset
:
警告 这是一个旨在以交互方式使用的便利功能。对于编程,最好使用像 [ 之类的标准子集函数,特别是参数子集的非标准评估可能会产生意想不到的后果。
这个相当模糊的警告在这里得到了很好的解释:为什么 `[` 比 `subset` 更好?
subset
最后一句话是除了交互式之外你不能使用,特别是不能通过你正在尝试的包装器。您应该[
改用:
fxn <- function(dataset, fac, lev) nrow(dataset[dataset[fac] == lev, , drop = FALSE])
或者更简单地说:
fxn <- function(dataset, fac, lev) sum(dataset[fac] == lev)