0

我有一个命名的 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”列表。

问候

4

1 回答 1

2

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

training_data[['pos']] 

这将使您可以访问名为 'pos' 或 posxx 的 data.frame ...

OP澄清后编辑

我在列表名称中使用 lapply ,我和我使用与上面相同的访问主列表的模式

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返回命名列表的 ,你会在这里得到更好的输出。

于 2013-02-01T00:51:08.363 回答