我有一个巨大的数据框,其变量/列名称以“ 1_variable”之类的数字开头。现在,我正在尝试创建一个函数,该函数可以将这些列名称用作参数,然后使用ggplot绘制一些箱形图。但是我需要字符串,但还需要使用带有``的输入来使用ggplot中的参数。但是,我不确定如何转义字符串“ 1_variable”以使ggplot输入“ 1_variable”。
可复制的小示例:
dfx = data.frame(`1ev`=c(rep(1,5), rep(2,5)), `2ev`=sample(10:99, 10),
`3ev`=10:1, check.names = FALSE)
如果我要手动绘制图形,输入将如下所示:
dfx$`1ev` <- as.factor(dfx$`1ev`)
ggplot(dfx, aes(x = `1ev`, y = `2ev`))+
geom_boxplot()
我想为数据框运行的功能是这个:
plot_boxplot <- function(data, group, value){
data = data[c(group, value)]
data[,group] = as.factor(data[,group])
plot <- ggplot(data, aes(x = group, y = value))+
geom_boxplot()
return(plot)
}
1。试试
plot_boxplot(dfx, `1ev`, `2ev`)
这给了我一个错误,说Error in [.data.frame(data, c(group, value)) : object '1ev' not found
2。试试
用双引号“”输入参数会意外地给我这样:
plot_boxplot(dfx, "1ev", "2ev")
3。试试
我还尝试在函数中用gsub
替换字符串的双引号
gsub('\"', '`', group)
但这只会改变其输出。
4。试试
最后,我还尝试使用aes_string
,但这给了我同样的错误。
plot_boxplot <- function(data, group, value){
data = data[c(as.character(group), as.character(value))]
data[,group] = as.factor(data[,group])
plot <- ggplot(data, aes_string(x= group, y=value))+
geom_boxplot()
return(plot)
}
plot_boxplot(dfx, `1ev`, `2ev`)
plot_boxplot(dfx, "1ev", "2ev")
理想情况下,我想运行该函数以产生以下输出:
plot_boxplot(dfx, group = "1ev", value = "2ev")
[可以使用此代码手动生成]
ggplot(dfx, aes(x= `1ev`, y=`2ev`)) +
geom_boxplot()
任何帮助将不胜感激。
答案 0 :(得分:3)
一种实现方法是将aes_
和as.name()
组合在一起:
plot_boxplot <- function(data, group, value){
data = data[c(group, value)]
data[,group] = as.factor(data[,group])
plot <- ggplot(data, aes_(x= as.name(group), y=as.name(value))) +
geom_boxplot()
return(plot)
}
并传递group
和value
的字符串:
plot_boxplot(dfx, "1ev", "2ev")
这与上面显示的图不同,但看起来与数据一致。