2

[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)

基本的に、x と y の対応する要素のいずれかが TRUE のときに要素が TRUE であるブール型のリストを取得したい

しかし

x||y

TRUE のスカラー値を返しますが、

mapply(function(x,y) x||y,x,y)

仕事をします。

それで、私は何を間違えましたか

x||y 

構文?

どうもありがとう...

4

1 に答える 1

2

x | yベクトル化された結果を取得するために行うことができます。の最初の要素とのx || y最初の要素のみを比較します。xy

これを理解するには、次の点を考慮してください。

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 
于 2015-04-06T08:41:31.467 に答える