R中的函数(x):写一个;功能“;没有定义函数?
我曾多次遇到过这个概念,但不知道它的名称,因此无法通过谷歌了解更多信息。基本上,当浏览其他人编写的函数或甚至简单命令时,我经常会看到类似的内容:R中的函数(x):写一个;功能“;没有定义函数?,r,function,R,Function,我曾多次遇到过这个概念,但不知道它的名称,因此无法通过谷歌了解更多信息。基本上,当浏览其他人编写的函数或甚至简单命令时,我经常会看到类似的内容: apply(dataset, 1:2, function(x) 10 * x) 在本例中,我能够计算出这个“假函数”函数(x)将数据集的每个元素乘以10。这似乎是一个有用的功能,但我仍然不确定何时或如何使用它。它真的是一个函数吗?或者它只是在apply函数族中工作?这东西有名字吗 这些被称为“匿名函数”,是的,它们是真正的函数对象,只是在使用之前没有
apply(dataset, 1:2, function(x) 10 * x)
在本例中,我能够计算出这个“假函数”函数(x)将数据集的每个元素乘以10。这似乎是一个有用的功能,但我仍然不确定何时或如何使用它。它真的是一个函数吗?或者它只是在apply函数族中工作?这东西有名字吗 这些被称为“匿名函数”,是的,它们是真正的函数对象,只是在使用之前没有分配给任何符号
以下是来自的相关位:
通常,函数被分配给符号,但它们不需要被分配。调用函数返回的值是一个函数。如果没有给它命名,则称为匿名函数。匿名函数最常用作其他函数(如apply族或outer)的参数
尽管它们通常用于*apply()
函数中,但它们不需要,例如,从这里可以看到
(function(x,y){x*y + x/y})(2,5)
# [1] 10.4
你是说(匿名函数)?您可以在~/.Rprofile
文件中放置类似的内容:
`{` <- function(...)
base::`{`(
if (length(sys.calls()) >= 4 &&
identical(as.character(sys.call()[[1]]), "{") &&
identical(as.character(sys.call(-4)[[1]]), "{"))
base::`{`(fn <- new('function'),
formals(fn) <- alist(x=), body(fn) <- sys.call(), fn)
else eval.parent(substitute(base::`{`(...)))
)
这更接近于Ruby或Coffeescript这样的语言,它们不需要调用关键字来生成lambda(在这里,它们使用
->
,但这已经在R中使用了,所以我使用了双大括号)。我刚刚想到了这个,所以如果有bug,请告诉我。从R4.1.0开始,现在可以在本机使用\(x){}
而不是函数(x){}
来实现匿名函数
apply代码可以写成
dataset |>
apply(1:2, \(x) {10 * x})
这叫做匿名函数。这对谷歌搜索应该有帮助。这可能对OP毫无帮助,但这是一个有趣的想法。我自己,我的问题是,大多数与我共事的人实际上在控制台中随机咀嚼时使用
->
来分配任务,这比回到开头容易这是一个有趣的想法,尽管我建议在重新定义这样一个基本的R符号时要小心。例如,system.time(replicate(1e6,{1+1}))
在我的盒子上从3.7秒变为37.1秒,在你重新定义{
@KonradRudolph之前和之后,实际上你可以超载(
与一起是的,有一天我希望理解这里所说的四分之一以上:)听起来很有趣。。。
dataset |>
apply(1:2, \(x) {10 * x})