R中的函数式编程

Met*_*ics 5 functional-programming r

我一直在读github的功能.页面中的一个建议是使用call_function一个正在使用函数列表的人.以下是该页面的代码:

call_fun <- function(f, ...) f(...)
f <- list(sum, mean, median, sd)
lapply(f, call_fun, x = runif(1e3))
Run Code Online (Sandbox Code Playgroud)

输出发布为:

# [[1]]
# [1] 498
# 
# [[2]]
# [1] 0.498
# 
# [[3]]
# [1] 0.49
# 
# [[4]]
# [1] 0.29
Run Code Online (Sandbox Code Playgroud)

但是,我无法复制上述结果.我收到了错误:

Error in FUN(X[[4L]], ...) : could not find function "f"
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?

edd*_*ddi 5

您已重新定义了该功能sd:

sd = 2

call_fun <- function(f, ...) f(...)
f <- list(sum, mean, median, sd)
lapply(f, call_fun, x = runif(1e3))
#Error in FUN(X[[4L]], ...) : could not find function "f"
Run Code Online (Sandbox Code Playgroud)

重启你的会话或做rm(sd).

  • 我不确定你_can_删除它.它已经有一个upvote(我的)和赞成答案(我和他人).如果有一种编程方式来处理问题,我仍然很好奇.我试过`call_fun < - function(f,...)match.fun(f)(...)`,它在简单的情况下成功,并且在环境中以与`sd == 5`相同的方式失败. (3认同)