[英]ifelse function - replacement has length zero R
我有一個數據集BBB
,它是一個列表,包含(0,1,2)
值和Xx
37232 obs。 1個變量。
head(Xx)
Xx
1 NA
2 0.0006458981
3 0.0014977347
4 0.0021436328
5 0.0018066425
head(BBB)
$`1`
[1] 1 2 0 0 0 0
$`2`
[1] 1 2 0
然后我制定了一條規則來獲取值,這些值將根據它們的位置稍后Xx
給Xx
子集
B<-rep(NA,(length(BBB)-2))
for(i in 1:(length(BBB)-2)){B[i]<-length(BBB[[i]])+as.numeric(which(BBB[[i+1]]==1))}
S<-rep(NA,(length(BBB)-2))
for(i in 1:(length(BBB)-2)){S[i]<-length(BBB[[i]])+as.numeric(which(BBB[[i+1]]==2))}
B<-as.data.frame(B)
S<-as.data.frame(S)
因此,子集的工作方式如下: Xx[B[5,]:S[5,],]
[1] -0.008050324 -0.007825664 -0.008471562 -0.008986408
現在,我想制定一條新規則來保存Xx
的每個子集的第一個值,該值大於或等於0.004
例如:
which(Xx[B[13,]:S[13,],]>=.0001)
[1] 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291
head(which(Xx[B[13,]:S[13,],]>=.0001),n=1)
[1] 277
所以我寫了下面的代碼:
SSS<-rep(NA,length(Xx))
for(i in 2:length(Xx)){SSS[i]<-ifelse(head(which(Xx[B[i,]:S[i,],]>=.004),n=1),
Xx[head(which(Xx[B[i,]:S[i,],]>=.004),n=1),],
tail(Xx[B[i,]:S[i,],]),n=1))}
但是當應用它時,出現以下錯誤:
Error in SSS[i] <- ifelse(head(which(Xx[B[i, ]:S[i, ], ] >= : replacement has length zero
您可能需要為ifelse語句嘗試此結構
SSS<-rep(NA,length(Xx))
for(i in 2:length(Xx)){
SSS[i] <- ifelse(length(which(Xx[B[i,]:S[i,],] >= .004)) > 0,
# If there are any values GTE .004, then return the first result GTE .004
Xx[head(which(Xx[B[i,]:S[i,],] >= .004), n=1),],
# If there are no values GTE .004, then return the last value of subset
tail(Xx[B[i,]:S[i,],]),n=1))
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.