2

使用包含数字列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”

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

4

1 回答 1

5

从以下文档subset

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

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

subset最后一句话是除了交互式之外你不能使用,特别是不能通过你正在尝试的包装器。您应该[改用:

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

或者更简单地说:

fxn <- function(dataset, fac, lev) sum(dataset[fac] == lev)
于 2012-09-16T01:52:26.413 回答