r - eval(expr, envir, enclos) 错误 : object * not found when wrapping qplot()

标签 r function scoping

我不明白为什么我的极简封装函数会产生主题错误。下面应该重现它。我的目标是根据单个数据框中的数据绘制一堆图,每个图都位于一个新窗口中。

library(ggplot2)
library(datasets)
data(ChickWeight)
str(ChickWeight)

# This works fine:
qplot(x = weight, y = Time, data = ChickWeight, color = Diet)

myfun <- function(pred = weight, resp = Time, dat = ChickWeight) {
  windows()
  qplot(x = pred, y = resp, data = dat, color = Diet)
}

# But this returns 'Error in eval(expr, envir, enclos) : object 'weight' not found':
myfun()
# As does this
myfun(weight, Time)

为什么 R 无法在我的函数中找到“权重”?

我在 Windows 8.1 64 位上运行 R 版本 3.0.1,64 位。

谢谢!

-罗伊

最佳答案

我建议从长远来看,这样的事情是个好主意:

myfun <- function(pred = "weight", resp = "Time", dat = ChickWeight) {
    dev.new()  ## more general than windows()
    ggplot(dat,aes_string(x=pred,y=resp,color="Diet"))+geom_point()
}
myfun()

qplot 做了很多花哨的评估,在您将对象传入和传出函数的上下文中,这些评估很脆弱(容易破坏,难以理解)。 aes_string 指定 ggplot 应该根据字符串的值进行查找,而不是通常的评估语言对象的方法(即使用 "weight" 而不是 weight)。

关于r - eval(expr, envir, enclos) 错误 : object * not found when wrapping qplot(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19897336/

相关文章:

function - 从写入 STDOUT 的函数返回值的最佳方法

python - "except Foo as bar"导致 "bar"从范围中删除

Java 作用域错误

scala - Scala 中的范围和内存问题

r - 获取 Rhandsontable 的选定行

r - selectInput 中的选项显示在传单 map 上

math - 如何集成/链接 R 和计算机代数系统 (CAS)

r - 删除元素后因子水平仍然显示

php - 在特定时间后在 php 中终止函数?

javascript - 通过从 JavaScript 中的函数返回一个函数来修改 div