在lapply中提取列出的数据框名称

时间:2016-09-12 17:12:29

标签: r ggplot2 lapply names

我正在从数据框列表中创建一个图表列表,并尝试为每个与列表中数据框名称对应的图表添加标题。 在lapply之外,如果我调用paste0(names(df.list)[x]),则会返回感兴趣的数据框的名称。

当我尝试在lapply

中添加此内容时

df.plots<-lapply(df.list, function(x) p<-ggplot(x,aes(x=Numbers,y=Signal)) + geom_point() + ggtitle(paste0(names(df.list)[x])) )

我收到以下错误:

Error in names(df.list)[x] : invalid subscript type 'list'

有没有其他方法可以提取数据框名称,以便我可以将它们添加到图中?

2 个答案:

答案 0 :(得分:1)

这会失败,因为x的值是列表df.list的一个元素,这不是您可以用来索引名称向量的内容。

您可以在索引向量上尝试lapply,这在aosmith链接的问题(Access lapply index names inside FUN)中进行了解释

lapply(seq_along(df.list), function(i) {
    ggplot(df_list[[i]], aes(x=Numbers, y=Signal)) + 
      geom_point() + 
      ggtitle(names(df.list)[i])
}

(另外,与您的问题不直接相关,但如果您只传递一个值,则调用paste0不会执行任何操作,因此您可以删除它)

答案 1 :(得分:1)

您可以使用 purrr 中的map2来同时遍历列表和列表名称,每次都创建一个图表。在map2中,.x引用第一个列表,.y引用第二个列表,您可以在绘图代码中使用。

library(purrr)
map2(dlist, names(dlist), 
    ~ggplot(.x, aes(Numbers, Signal)) +
        geom_point() +
        ggtitle(.y))