R:map中的列表理解,而不是过滤

时间:2014-10-02 15:03:35

标签: r performance list-comprehension vectorization idiomatic

因此,this question告诉我如何在R中执行列表推导以过滤掉新值。

我想知道,编写列表理解的标准R方法是什么,它会产生新的值?

基本上,如果我们有一个函数f和向量x,我想要列表f(el) for el in x。 (这就像函数式编程中的地图一样)。

在Python中,这只是[f(el) for el in x]。我如何用标准方式在R中写这个?

问题是,现在我有for循环:

result = c(0)
for (i in 1:length(x))
{
    result[i] = f(x[i])
}

是否有更类似于R的方式来编写此代码,以避免for循环的开销?

2 个答案:

答案 0 :(得分:3)

我建议看看R包rlist,它提供了许多实用程序功能,可以很容易地使用列表。例如,你可以写

list.map(x, x ~ x + f(x))

答案 1 :(得分:2)

以下作品没有任何特殊功能:

> x <- 1:10
> f <- function(x) {x+log(x)}
> 
> f(x)
 [1]  1.000000  2.693147  4.098612  5.386294  6.609438  7.791759  8.945910 10.079442 11.197225 12.302585

> result = f(x)
> result
 [1]  1.000000  2.693147  4.098612  5.386294  6.609438  7.791759  8.945910 10.079442 11.197225 12.302585

如果x是向量,则f(x)的结果将是向量。

> y = 12
> f(y)
[1] 14.48491