我有很多基于两种类型列表的列表。如果条件为numeric(0)
,其中一个列表必须返回FALSE
,但是,它会返回NULL
此NULL
,然后在下一步中计算,这将为我返回错误长度。请注意,我需要psca2
作为列表,因为我不知道我的数据将如何。
这是我的代码:
type1 <- c(2, 6, 4, 4, 3, 5, 5, 6, 6,3)
type2 <- c(3, 5, 3, 5, 6, 4, 3, 3, 3, 5)
type <- list(type1, type2)
np <- 10
np2 <- list(1,0)
psca <- numeric()
psca <- list()
length(psca) <- 2
for (i in 1:np){
for(j in 1:2){
psca[[j]][i] <- ifelse(type[[j]][i] %in% c(1, 2, 43, 44), 0.01, 1)
}
}
NULL
,该元素必须为numeric(0)
。psca2 <- numeric()
psca2 <- list()
length(psca2) <- 2
for(j in 1:2){
if(np2[[j]] > 0 ){
for (i in 1:np2[[j]]) {
psca2[[j]][i] <- ifelse(type[[j]][i] %in% c(104, 114, 124, 134, 204, 214, 224, 234), 0.05, 1)
}
psca[[j]] <- c(psca[[j]], psca2[[j]])
}
}
输出:
> psca
[[1]]
[1] 0.01 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
[[2]]
[1] 1 1 1 1 1 1 1 1 1 1
> psca2
[[1]]
[1] 1
numeric(0)
[[2]]
NULL
有什么帮助吗?
答案 0 :(得分:1)
在这里,我们初始化NULL
list
length
2并且存在if
条件,该条件仅评估&#39; np2&#39;的元素。大于0.当第二个元素为0时,它不会对该元素执行任何操作,从而导致初始对象的NULL
。相反,我们可以初始化list
numeric(0)
,然后应用条件
psca2 <- replicate(2, numeric(0), simplify = FALSE)
for(j in 1:2){
if(np2[[j]] > 0 ){
for (i in seq_along(np2)[[j]]) {
psca2[[j]][i] <- ifelse(type[[j]][i] %in%
c(104, 114, 124, 134, 204, 214, 224, 234), 0.05, 1)
print(i)
}
psca[[j]] <- c(psca[[j]], psca2[[j]])
}
}
psca2
#[[1]]
#[1] 1
#[[2]]
#numeric(0)