我習慣於在Mathematica中使用Pure函數。我如何在R中使用它們?例如:在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)
感謝
我習慣於在Mathematica中使用Pure函數。我如何在R中使用它們?例如:在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)
感謝
狹義翻譯,你的函數是:
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中矢量)
lapply(z,f)的作品。儘管它似乎改變了從行向列的維度。爲什麼? – 2015-02-24 01:54:02
'lapply(z,f)'採用* vector *'z'(1維:既不是行也不是列向量)並返回* list *。你可以使用'sapply()'(或'vapply()')來獲得一個向量。 – 2015-02-24 02:26:00
真的很容易:
b = z > 0
R中最簡單的操作已經被量化。
你可以使用'ifelse'? 'f < - function(x){ifelse(x> 0,TRUE,FALSE)}'。其實,你不需要在這裏使用'lapply'。只要運行'ifelse(z> 0,TRUE,FALSE)'它應該給你答案。 – Metrics 2015-02-24 01:21:00