x||y 与 [R] 中的 mapply(function(x,y) x||y,x,y)
x||y vs. mapply(function(x,y) x||y,x,y) in [R]
我认为我在使用 [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 中的对应元素为真时,其中一个元素为真
但是
x||y
returns 标量值为 TRUE 而
mapply(function(x,y) x||y,x,y)
完成任务。
所以我在
上做错了什么
x||y
语法?
非常感谢...
您只需 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
我认为我在使用 [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 中的对应元素为真时,其中一个元素为真
但是
x||y
returns 标量值为 TRUE 而
mapply(function(x,y) x||y,x,y)
完成任务。
所以我在
上做错了什么x||y
语法?
非常感谢...
您只需 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