単純なコマンドを実行しようとしていますが、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()
条件がtrueと評価されたかfalseと評価されたかによって長さが異なりますが、なぜこれが長い出力の切り捨てを引き起こすのかわかりません。
コードはif
、ではなく、を使用する必要がありifelse
ます。?ifelse
それから、次のようになります。のtest
最初の引数はどこにありますかifelse
。
「ifelse」は「test」と同じ形の値を返します
問題test
は、del == 1
どちらが論理スカラーであるかということです。したがって、結果も1つになります。
また、正のオフセットが先行しているオフセット1、2、...、del-1を参照するrollapply
ために使用list(1:(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
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加