如何解决在ifelse语句内部与外部运行一行时的输出不同
我试图运行一个简单的命令,但不知道为什么在ifelse()
函数内部与外部运行时输出不同。函数条件的计算结果为FALSE
,因此输出应完全相同。
但是,单独运行时,输出为0 0 1 1 0 1 0 1 NA
(根据需要),但是从ifelse()
函数中,输出为0
(不期望)。
library(dplyr)
library(zoo)
x <- c(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,align = "left")) == 0)
[1] FALSE
对于为什么会发生这种情况,我将不胜感激!以前从未见过这样的事情。 ifelse()
的结果长度取决于条件被评估为真还是假的长度不同,但是我不明白为什么这会导致较长输出的截断。
解决方法
该代码应使用if
,而不是ifelse
。从?ifelse
开始,其内容如下:test
是ifelse
的第一个参数。
“ ifelse”返回的值与“ test”的形状相同
问题test
是del == 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。