在R中创建Pure函数

Nic*_*nce 1 functional-programming r

我习惯在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)
Run Code Online (Sandbox Code Playgroud)

谢谢

Ben*_*ker 7

缩小翻译,你的功能是:

f <- function(x) { if (x > 0)  TRUE else FALSE } 
Run Code Online (Sandbox Code Playgroud)

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

f <- function(x) { x > 0 }
Run Code Online (Sandbox Code Playgroud)

会给你同样的结果lapply:所以会

lapply(z,">",0)
Run Code Online (Sandbox Code Playgroud)

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

z <- rnorm(10)   ## no need for do.call() in this example
z > 0
Run Code Online (Sandbox Code Playgroud)

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

  • `lapply(z,f)`取*vector*`z`(1维:它既不是行也不是列向量)并返回*list*.您可以使用`sapply()`(或`vapply()`)来获取向量. (2认同)

Señ*_*r O 5

真的很简单:

b = z > 0
Run Code Online (Sandbox Code Playgroud)

R中最简单的操作已经矢量化。