运行 一行在 ifelse() 语句内部与外部时的不同输出
Different output when running a line inside vs. outside an ifelse() statement
我正在尝试 运行 一个简单的命令,但不知道为什么 运行 在 ifelse()
函数内部与外部输出不同。函数条件的计算结果为 FALSE
,因此输出应该完全相同。
然而,当 运行 单独使用它时,输出是 0 0 1 1 0 1 0 1 NA
(如预期的那样)但是从 ifelse()
函数中,输出是 0
(不是预期的).
library(dplyr)
library(zoo)
x <- c(0, 1, 1, 0, 0, 1, 0, 1, 0)
del <- 2
dplyr::lead(zoo::rollsum(x, del - 1, fill = NA, align = "left")) == 0
[1] FALSE FALSE TRUE TRUE FALSE TRUE FALSE TRUE NA
ifelse(del == 1, -1, dplyr::lead(zoo::rollsum(x, del - 1, fill = NA, align = "left")) == 0)
[1] FALSE
对于为什么会发生这种情况,我将不胜感激!以前从未见过这样的事情。 ifelse()
的结果具有不同的长度,具体取决于条件被评估为真还是假,但我不明白为什么这会导致更长输出的 t运行 阳离子。
代码应该使用 if
,而不是 ifelse
。从 ?ifelse
开始,它表示以下内容,其中 test
是 ifelse
的第一个参数。
‘ifelse’ returns a value with the same shape as ‘test’
在问题 test
中,del == 1
是一个逻辑标量,因此结果也是 1。
此外,rollapply
可以使用 list(1:(del-1))
来指代偏移量 1、2、...、del-1,其中正偏移量在前面。这看起来更干净,因为它直接实现了想要的东西而不是稍后修复它,而且它使用的包也更少。
library(zoo)
del <- 2
if (del == 1) -1 else rollapply(x == 0, list(1:(del-1)), all, fill = NA)
## [1] FALSE FALSE TRUE TRUE FALSE TRUE FALSE TRUE NA
我正在尝试 运行 一个简单的命令,但不知道为什么 运行 在 ifelse()
函数内部与外部输出不同。函数条件的计算结果为 FALSE
,因此输出应该完全相同。
然而,当 运行 单独使用它时,输出是 0 0 1 1 0 1 0 1 NA
(如预期的那样)但是从 ifelse()
函数中,输出是 0
(不是预期的).
library(dplyr)
library(zoo)
x <- c(0, 1, 1, 0, 0, 1, 0, 1, 0)
del <- 2
dplyr::lead(zoo::rollsum(x, del - 1, fill = NA, align = "left")) == 0
[1] FALSE FALSE TRUE TRUE FALSE TRUE FALSE TRUE NA
ifelse(del == 1, -1, dplyr::lead(zoo::rollsum(x, del - 1, fill = NA, align = "left")) == 0)
[1] FALSE
对于为什么会发生这种情况,我将不胜感激!以前从未见过这样的事情。 ifelse()
的结果具有不同的长度,具体取决于条件被评估为真还是假,但我不明白为什么这会导致更长输出的 t运行 阳离子。
代码应该使用 if
,而不是 ifelse
。从 ?ifelse
开始,它表示以下内容,其中 test
是 ifelse
的第一个参数。
‘ifelse’ returns a value with the same shape as ‘test’
在问题 test
中,del == 1
是一个逻辑标量,因此结果也是 1。
此外,rollapply
可以使用 list(1:(del-1))
来指代偏移量 1、2、...、del-1,其中正偏移量在前面。这看起来更干净,因为它直接实现了想要的东西而不是稍后修复它,而且它使用的包也更少。
library(zoo)
del <- 2
if (del == 1) -1 else rollapply(x == 0, list(1:(del-1)), all, fill = NA)
## [1] FALSE FALSE TRUE TRUE FALSE TRUE FALSE TRUE NA