【发布时间】:2017-11-29 09:38:38
【问题描述】:
我有一个数据集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 进行子集化
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
【问题讨论】:
-
什么是
Returns?如果未定义,则很可能会生成此错误消息。 -
syntax:
ifelse(test, yes, no)您正在将head(which(Xx[B[i,]:S[i,],]>=.004))插入到测试中,但没有实际测试它 -
@AndrewGustar 应该是
Xx我忘记改了。 -
ifelse中没有给出条件,而是一个数字 -
以
i=13为例,你做ifelse(277,...)那是行不通的。
标签: r loops if-statement subset