循环遍历dfs的命名列表,在df的列上测试条件,如果列表元素的返回名称为true

时间:2013-02-01 00:46:00

标签: r list loops lapply named

我有一个data.frame对象的命名列表(training_data)。每个data.frame对象都将基于“x”列进行测试,如果测试通过,则应该返回该data.frame对象的名称。

在下面的情况中,应该返回“a”和“b”:

df <- data.frame(x=1:10, y=1:10)
df1 <- data.frame(x=11:20, y=11:20)
training_data <- list(df, df, df1, df1)
names(training_data) <- c("a", "b", "c", "d")

pos <- lapply(training_data, function(data) {
                                 if(data$x==1)
                                    ["return the name of the data.frame object in hand"]
                              })

我的问题是如何在lapply的任何迭代中确定当前正在处理的对象的名称,以及如何返回该名称以使其进入“pos”列表。

此致

1 个答案:

答案 0 :(得分:2)

此处无需使用lapply,您可以访问列表,例如:

training_data[['pos']] 

这将使您获得名为'pos'或posxx ...

的data.frame 在OP澄清后

编辑

我在列表的名称中使用lapply,我和我在主列表中使用相同的access模式

pos <- lapply(names(training_data), function(data) {
  if(training_data[[data]]$x==1)        ## here your condition is not correct
    data

})

  [[1]]
[1] "a"

[[2]]
[1] "b"

[[3]]
NULL

[[4]]
NULL

您可以使用

之类的内容删除NULL元素
unlist(pos)
[1] "a" "b"

但是如果您使用返回命名列表的sapply,我认为您将获得更好的输出。