我的数字列表返回Null而不是零

时间:2017-10-23 10:48:06

标签: r

我有很多基于两种类型列表的列表。如果条件为numeric(0),其中一个列表必须返回FALSE,但是,它会返回NULLNULL,然后在下一步中计算,这将为我返回错误长度。请注意,我需要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

有什么帮助吗?

1 个答案:

答案 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)