2015-02-24 75 views
1

我習慣於在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) 

感謝

+0

你可以使用'ifelse'? 'f < - function(x){ifelse(x> 0,TRUE,FALSE)}'。其實,你不需要在這裏使用'lapply'。只要運行'ifelse(z> 0,TRUE,FALSE)'它應該給你答案。 – Metrics 2015-02-24 01:21:00

回答

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中矢量)

+0

lapply(z,f)的作品。儘管它似乎改變了從行向列的維度。爲什麼? – 2015-02-24 01:54:02

+2

'lapply(z,f)'採用* vector *'z'(1維:既不是行也不是列向量)並返回* list *。你可以使用'sapply()'(或'vapply()')來獲得一個向量。 – 2015-02-24 02:26:00

4

真的很容易:

b = z > 0 

R中最簡單的操作已經被量化。