循环遍历列表的元素,然后附加到新列表

时间:2017-08-14 16:51:08

标签: r

我一直在尝试编写代码,允许我遍历列表中的项目,每个项目都是数值的向量。对于向量的元素满足某个标准,我想将这些数字附加到一个新的列表中,该列表还包含一个数值向量。

我的数据集结构如下:

Col1 Col2 Col3 .... Col29
-11   -10  -9  ....   15
-13   -12  -11 ....   14

到目前为止,我已尝试过以下代码:

new_list <- list()
for(i in 1:length(time_list)) {
  for(j in 1:length(time_list[[i]]) {
    if(!is.na(time_list[[i]][j]) & time_list[[i]][j] >= 0) {
      # I am stuck here, as all the code I've run gives me an error.
    }
  }
}

我希望列表的结构与原始列表几乎相同,但只保留大于或等于0的数字。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我会将您的数据df称为

df <- structure(list(Time_1 = -13L, Time_2 = -12L, Time_3 = -11L, Time_4 = -10L, 
        Time_5 = -9L, Time_6 = -8L, Time_7 = -7L, Time_8 = -6L, Time_9 = -5L, 
        Time_10 = -4L, Time_11 = -3L, Time_12 = -2L, Time_13 = -1L, Time_14 = 0L, 
        Time_15 = 1L))

is.pos <- function(x){
  (!is.na(x)) & (x >= 0)
}

该函数将检查我们是否正在处理正数并返回TRUEFALSE。我们将其用于索引:

is.pos(df)
# Time_1  Time_2  Time_3  Time_4  Time_5  Time_6  Time_7  Time_8  Time_9 Time_10 
# FALSE   FALSE   FALSE   FALSE   FALSE   FALSE   FALSE   FALSE   FALSE   FALSE 
# Time_11 Time_12 Time_13 Time_14 Time_15 
# FALSE   FALSE   FALSE    TRUE    TRUE 

df[is.pos(df)]
# $Time_14
# [1] 0
# 
# $Time_15
# [1] 1

答案 1 :(得分:0)

从上面的陈述中,您似乎只想从列表中删除负值。如果是这种情况,那么为什么不尝试这样的事情:

grep -Pzo 'imports: \[(?:(?!SharedModule)[^]])*]'