在R中创建Pure函数

时间:2015-02-24 01:20:07

标签: r functional-programming

我曾经习惯在Mathematica中使用Pure函数。我如何在R中使用它们?例如:

给定一个数字列表,我想根据数字是正数还是负数来指定TRUE / FALSE。

z <- do.call(rnorm,list(n=10))            # Generate 10 numbers
f <- function(x) { x > 0 ? TRUE : FALSE } # Searching for proper syntax
b <- lapply(z,f)

由于

2 个答案:

答案 0 :(得分:7)

缩小翻译,您的功能将是:

f <- function(x) { if (x > 0)  TRUE else FALSE } 

(您不需要使用ifelse(),因为这是x将成为标量的上下文(即长度为1的向量))

f <- function(x) { x > 0 }

会在lapply电话中给出相同的结果:所以

lapply(z,">",0)

如上所述,您可以使用ifelse(z>0,TRUE,FALSE)。 但是没有必要指定逻辑返回值,因为z>0的结果已经是逻辑向量。这样做的惯用方法是

z <- rnorm(10)   ## no need for do.call() in this example
z > 0

(逻辑比较在R中向量化)

答案 1 :(得分:4)

非常简单:

b = z > 0

R中的大多数简单操作都已经过矢量化。