2015-10-18 58 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