所以,通常(即不在函数内部),我会写这个:
ggplot(myData, aes(factor(Variable1), Variable2)) +
geom_boxplot(fill="grey", colour="black")+
labs(title = "Variable1 vs. Variable2" ) +
labs (x = "variable1", y = "Variable2")
myData是我的数据框架 变量1是2级因子变量 变量2是连续变量 我想用2个级别/组制作变量1的箱线图 这很好, 但是一旦我在函数中写这个,我就无法让它工作。
我写这个函数的尝试:
myfunction = function (data, Variable1) {
ggplot(data=myData, aes_string(factor("Variable1"), "Variable2"))+
geom_boxplot(fill="grey", colour="black")+
labs(title = paste("Variable1 vs. Variable2" )) +
labs (x = "variable1", y = "Variable2")
}
这只给了我一个箱图(而不是2),好像它从未理解因子(Variable1)命令(并且做了整个变量2的单个箱图,而不是先将它们按变量1级别分开,然后boxplot他们)。
答案 0 :(得分:5)
Aes_string评估整个字符串,因此如果你sprintf("factor(%s)",Variable1)
得到了所需的结果。作为进一步的评论:您的函数有一个数据参数,但在绘图中使用myData
。我还编辑了x-lab和title,这样你就可以传递'Variable3'并获得合适的标签。
使用一些示例数据:
set.seed(123)
dat <- data.frame(Variable2=rnorm(100),Variable1=c(0,1),Variable3=sample(0:1,100,T))
myfunction = function (data, Variable1) {
ggplot(data=data, aes_string(sprintf("factor(%s)",Variable1), "Variable2"))+
geom_boxplot(fill="grey", colour="black")+
labs(title = sprintf("%s and Variable2", Variable1)) +
labs (x = Variable1, y = "Variable2")
}
p1 <- myfunction(dat,"Variable1")
p2 <- myfunction(dat,"Variable3")