我有一个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”列表。
此致
答案 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
,我认为您将获得更好的输出。