2015-10-18 56 views
3

在完成对数据框的操作后,生成ggplot()图时出现意外问题。我提供一个说明性的例子:由于var.name引述ggplot处理带引号的变量

func <- function(){ 
library(ggplot2) 
df <- read.table(....) 
# perform operation on df to retrieve column of interest index/number 
column.index <- regexpr(...) 
# now need to find variable name for this column 
var.name <- names(df)[column.index] 
# also need to mutate data in this column 
df[,column.index] <- df[,column.index] * 10 
# generate plot 
plot <- ggplot(data, aes(x=var.name))+geom_bar() 
print(plot) 
} 

这里ggplot将抛出一个错误,例如,“省油”。 任何想法如何解决这个问题?

编辑:从this question测试解决方案无济于事。

+0

@ David:我在NSE中测试了'quote',所以我添加了标签以提示有关问题的性质。 – remi

+0

Gotcha。快速打字和思考,想到我把它:-) – remi

回答

3

使用aes_string,它允许你传递一个字符串变量的名称。

+1

@ smci:谢谢你的建议。 'aes_string'只有在'var.name'从引号中被修剪时才会起作用:ie:'var = as.name(var.name)'' – remi

-2

您可以使用包“dplyr”重新命名var.name列的东西通用的(X),然后在X情节:

# also need to mutate data in this column 
df[,column.index] <- df[,column.index] * 10 
# ***NEW*** re-name column to generic name 
df <- rename_(df, .dots=setNames(list(var.name), 'x')) 
# generate plot 
plot <- ggplot(df, aes(x=x))+geom_bar() 
+0

,然后在绘图调用结束时添加'+ xlab(var.name)'来重命名轴 – easports611

+0

更简单的方法来做重命名步骤'df < - rename_(df,x = var.name)' – easports611

+1

这是一个破解;使用'aes_string()',这就是 – smci