r - 应用于嵌套函数

标签 r functional-programming apply

这不是一个真正的问题,但我想知道是否有更优雅的解决方案:

假设我有一个向量 vec <- rlnorm(10)我想对它应用一个未矢量化的函数,例如exp (暂时忽略它是矢量化的),我可以

sapply( vec, exp )

但是当我要应用的函数是嵌套的时候,表达式就直接变得不那么简单了:
sapply( vec, function(x) exp( sqrt(x) ) )
apply 经常发生在我身上和 plyr家庭。

所以我的问题是,通常是否有一种优雅的方式来嵌套(或管道)函数而不明确定义(匿名)函数 function(x){...} ?就像是
# notrun
sapply( vec, sqrt | exp )

或类似的。

最佳答案

请参阅 ?Reduce 的示例:

## Iterative function application:
Funcall <- function(f, ...) f(...)
## Compute log(exp(acos(cos(0))
Reduce(Funcall, list(log, exp, acos, cos), 0, right = TRUE)

这是一个更简单的实现,接口(interface)略有不同:
Compose <- function(x, ...)
{
    lst <- list(...)
    for(i in rev(seq_along(lst)))
        x <- lst[[i]](x)
    x
}

sapply(0, Compose, log, exp, acos, cos)

关于r - 应用于嵌套函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17190588/

相关文章:

python - Pandas:将函数应用于每个组并将结果存储在新列中

mysql - R:Windows 上的 MySQL 字符编码

r:带有自定义图例和永久显示国名的 Choropleth

scala - 为什么命令式语言没有模式匹配?

.net - 为什么 F# 不支持使用类型缩写扩展系统类型?

滚动应用于向量的子集

Scala:尝试重载案例类 apply 方法时,apply 方法被定义了两次

r - 管道函数中的消息顺序

r - 如何在 R 中动态渲染按钮图标 Shiny

list - 按第二个元组元素对元组列表进行排序