我一直在尝试创建返回ggplot列表并且遇到各种问题的函数。然而,从根本上说,我不明白为什么这是TRUE
"data.frame" == class(c(qplot(1:10,rnorm(10)))[[1]])
这是[TRUE,TRUE]
c('gg','ggplot') == class(qplot(1:10,rnorm(10)))
我没有看到任何类似的问题。我看到了诸如
之类的问题所解决的各种问题lapply(someList, function(x) {
#make ggplot, then use print(...) or whatever
})
所以我猜测有一些关于将ggplot对象从函数或环境之间传递出去的东西。感谢关于我缺少的ggplot或R的任何线索。
答案 0 :(得分:7)
library(ggplot2)
p = c(qplot(1:10,rnorm(10)))
p2 = qplot(1:10,rnorm(10))
p[[1]]
(与p[['data']])
相同)应该是dataframe
。它通常包含绘图的数据。
p
是list
,因为您使用了c
功能。
p2
是ggplot
,因为qplot
返回的是什么。
查看每个对象的属性。
attributes(p)
# $names
# [1] "data" "layers" "scales" "mapping" "theme" "coordinates"
# [7] "facet" "plot_env" "labels"
attributes(p2)
# $names
# [1] "data" "layers" "scales" "mapping" "theme" "coordinates"
# [7] "facet" "plot_env" "labels"
#
# $class
# [1] "gg" "ggplot"
要存储多个ggplot
个对象,请使用list
。
ggplot.objects = list(p2,p2,p2)
c
帮助文件
表明ggplot
不是可能的输出。
它还说明了
c
有时用于删除属性的副作用 除名称外,例如将数组转换为向量
如果你想要的话
c
要返回ggplot
个对象,那么您可以尝试定义自己的c.ggplot
功能。您必须阅读有关S3和S4功能的详细信息,以了解其中的内容
继续。
答案 1 :(得分:3)
如果在全局环境中有几个ggplot对象,可以使用以下命令列出它们:
ggplot_list <- Filter(function(x) is(x, "ggplot"), mget(ls()))