2015-04-06 192 views
2

我想我必須使用少量語法糖的問題[R]:X ||Ÿ與mapply(函數(X,Y)X || Y,X,Y)在[R]

x=rnorm(1000,mean = 1,sd = 1) 
y=rnorm(1000,mean = 1,sd = 1) 
x=x>1 
y=y>1 
x||y 
mapply(function(x,y) x||y,x,y) 

基本上我想獲得布爾類型的列表,其中的元素是TRUE時無論是在x和y的相應元素是TRUE

x||y 

返回TRUE而

標量值
mapply(function(x,y) x||y,x,y) 

完成這項工作。

所以我怎麼弄錯的

x||y 

語法?

非常感謝......

回答

2

你可以做x | y獲得量化的結果。 x || y僅將x的第一個元素與y的第一個元素進行比較。

要理解這一點,考慮以下因素:

TRUE | FALSE 
# [1] TRUE 
TRUE || FALSE 
# [1] TRUE 

c(TRUE, FALSE) | c(TRUE, FALSE) 
# [1] TRUE FALSE 
c(TRUE, FALSE) || c(TRUE, FALSE) # only first element is compared 
# [1] TRUE 

c(FALSE, TRUE) | c(FALSE, TRUE) 
# [1] FALSE TRUE 
c(FALSE, TRUE) || c(FALSE, TRUE) # only first element is compared 
# [1] FALSE 

mapply在這裏不需要,因爲這只是重建的|行爲:

identical(c(FALSE, TRUE) | c(FALSE, TRUE), mapply(function(x,y) x || y, c(FALSE, TRUE),c(FALSE, TRUE))) 
# [1] TRUE 
identical(c(TRUE, FALSE) | c(FALSE, TRUE), mapply(function(x,y) x || y, c(TRUE, FALSE),c(FALSE, TRUE))) 
# [1] TRUE 

mapply也更耗費計算:

microbenchmark::microbenchmark(mapply(function(x,y) x||y, x, y), x | y) 
Unit: microseconds 
           expr  min  lq  mean median  uq  max neval cld 
mapply(function(x, y) x || y, x, y) 1495.294 1849.006 2186.77275 2012.776 2237.936 5320.702 100 b 
           x | y 27.713 28.868 39.97163 33.871 38.297 166.657 100 a 
+0

Hi Thomas,tha很多 - 雖然我認爲帕斯卡的解釋是正確的。 – 2015-04-06 08:43:11

+0

@RomeoKienzler不,這不是嚴格正確的。 – Thomas 2015-04-06 08:48:42

+0

@Thomas是對的。 – 2015-04-06 09:09:41

相關問題