【发布时间】:2017-10-05 18:58:35
【问题描述】:
我正在尝试在一个循环中创建多个图(使用 ggplot2),并且我正在使用以下函数。
我使用 iris 数据集并添加了一个名为“ran_fact”的随机因子变量。因此数据集现在有四个数值变量和两个因子(Species 和 ran_fac)。
此时循环遍历数值变量并为每个变量创建一个图。这两个因子变量是在循环内手动设置的(作为图 x 轴和颜色),这使得它不太通用。我想知道是否可以将 x 轴和颜色选项设置为函数参数,如果可以,如何做到这一点?
提前谢谢你。
另外,作为一个附带问题,select_if(x, is.numeric) 下面似乎没有从数据集中删除因子变量。
library(datasets)
library(dplyr)
library(ggplot2)
library(beeswarm)
data(iris)
iris$ran_fac <- as.factor(c("A", "B", "C", "D", "E"))
plotFunc <- function(x, na.rm = TRUE,...) {
plot_list = list()
nm <- select_if(x, is.numeric)
nm <- names(x)
for (i in seq_along(nm)) {
plots <-ggplot(x,aes_string("ran_fac", nm[i], color="Species")) + geom_quasirandom() + geom_boxplot()
plot_list[[i]] = plots
print(plots)
ggsave(plots,filename=paste("myplot",nm[i],".png",sep=""))
}
}
plotFunc(iris)
【问题讨论】:
-
请正确缩进您的代码。我帮你修好了。
-
如果您能更明确地了解所需的输出是什么,这将有所帮助。你到底想怎么调用函数,你希望结果是什么?
-
select_if(is.numeric)返回因子的示例在哪里?如果我运行sapply(iris, class)我看到 Species 是一个因素,如果我运行names(dplyr::select_if(iris, is.numeric))它不会返回。 -
嗨 Silke,关于“select_if”问题,我认为问题在于您正在尝试检索原始数据框的名称(虹膜,请参阅函数中的 x)而不是检索名称来自子集数据帧 (nm)。在函数中,select_if 函数不是从数据框 iris 中删除变量,而是使用选定的数值变量创建一个新变量。如果您使用“nm
-
当然,@storm spray,就是这样。我现在觉得有点愚蠢;)。谢谢。