【发布时间】:2017-03-11 14:17:29
【问题描述】:
长期阅读者,第一次提问者...我有一个函数,可以输入数据并输出具有某些特定格式的 ggplot2 直方图。我正在尝试编辑此函数,以便函数参数之一可以指定我是否希望直方图显示数据的频率或密度。我知道我可以分别在aes(y=..count..) 或aes(y=..density..) 的geom_histogram() 函数中手动指定它。但是如果不直接输入这些变量,我在弄清楚如何访问这些变量时遇到了问题。
这是我正在尝试做的简化版本:
library(ggplot2)
histplot <- function(data,density=FALSE) {
if (density) {
type <- "..density.."
} else {
type <- "..count.."
}
theplot <- ggplot(data, aes(x=data[,1])) +
geom_histogram(position="identity",binwidth = 2,
aes(y=eval(parse(text=type))))
g <- ggplot_gtable(ggplot_build(theplot))
grid.draw(g)
}
xy <- data.frame(X=rnorm(100,0,10),Y=rnorm(100))
histplot(xy)
当我执行这个函数时,我得到的错误是:
Error in eval(expr, envir, enclos) : object '..count..' not found
我不知道为什么这不起作用,因为如果我执行以下操作:
x <- 1:5
y <- "x"
eval(parse(text=y))
那么输出就是
[1] 1 2 3 4 5
我的猜测是它与环境有关。
【问题讨论】:
-
@Elin 如果您有一个名为
string的变量,那么eval(parse(text="string"))将获取字符串"string"并执行具有相同名称的变量