在 R 中创建纯函数
Creating a Pure function in R
我习惯在 Mathematica 中使用纯函数。我如何在 R 中使用它们?例如:
给定一个数字列表,我想根据数字是否为 positive/negative 分配 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)
谢谢
狭义翻译,您的函数将是:
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)
。
但是不需要指定逻辑 return 值,因为 z>0
的结果已经是一个逻辑向量。惯用的方法是
z <- rnorm(10) ## no need for do.call() in this example
z > 0
(逻辑比较在 R 中矢量化)
真的很简单:
b = z > 0
R 中的大多数简单操作都已矢量化。
我习惯在 Mathematica 中使用纯函数。我如何在 R 中使用它们?例如:
给定一个数字列表,我想根据数字是否为 positive/negative 分配 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)
谢谢
狭义翻译,您的函数将是:
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)
。
但是不需要指定逻辑 return 值,因为 z>0
的结果已经是一个逻辑向量。惯用的方法是
z <- rnorm(10) ## no need for do.call() in this example
z > 0
(逻辑比较在 R 中矢量化)
真的很简单:
b = z > 0
R 中的大多数简单操作都已矢量化。