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中的匿名函数的主要内容,如果未能解决你的问题,请参考以下文章

python学习-day16:函数作用域匿名函数函数式编程mapfilterreduce函数内置函数r

内置函数和匿名函数

python学习笔记10-匿名函数lambda

13.函数式编程:匿名函数高阶函数装饰器

js中的匿名函数和匿名自执行函数

JavaScript中的匿名函数立即执行函数和闭包