我正在从数据框列表中创建一个图表列表,并尝试为每个与列表中数据框名称对应的图表添加标题。
在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'
有没有其他方法可以提取数据框名称,以便我可以将它们添加到图中?
答案 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))