R中的匿名函数
Posted
技术标签:
【中文标题】R中的匿名函数【英文标题】:Anonymous function in R 【发布时间】:2012-09-16 01:34:57 【问题描述】:使用一个数据集 w,其中包括一个数字列 PY,我可以这样做:
nrow(subset(w, PY==50))
并得到正确答案。但是,如果我尝试创建一个函数:
fxn <- function(dataset, fac, lev)nrow(subset(dataset, fac==lev))
然后运行
fxn(w, PY, 50)
我收到以下错误:
eval(expr, envir, enclos) 中的错误:找不到对象“PY”
我做错了什么?谢谢。
【问题讨论】:
【参考方案1】:来自subset
的文档:
警告 这是一个旨在以交互方式使用的便利功能。对于编程,最好使用像 [ 之类的标准子集函数,特别是参数子集的非标准评估可能会产生意想不到的后果。
这个相当模糊的警告在这里得到了很好的解释: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)
【讨论】:
我阅读了链接页面和 Hadley 的文档;仍然无法使其工作:(以上是关于R中的匿名函数的主要内容,如果未能解决你的问题,请参考以下文章