'character'类型的'envir'参数无效 - 在带有点阵直方图的自定义函数中

时间:2013-07-15 21:08:33

标签: r error-handling lattice

我想要一个带有参数的函数,例如数据名(dat),factor(myfactor),变量名(myvar)来动态生成直方图(必须使用晶格)。

使用IRIS作为最小例子:

data(iris)



my_histogram <- function(myvar,myfactor,dat){
    listofparam <- c(myvar,myfactor)
    myf <- as.formula(paste("~",paste(listofparam,collapse="|")))
    histogram(myf,
              data=dat,
              main=bquote(paste(.(myvar),"distribution by",.(myfactor),seq=" ")))}



my_histogram("Sepal.Length","Species","iris") 

我也试过do.call,因为有些帖子表示:

my_histogram <- function(myvar,myfactor,dat){
listofparam <- c(myvar,myfactor)
myf <- as.formula(paste("~",paste(listofparam,collapse="|")))
p <- do.call("histogram",
   args = list(myf,
   data=dat))
print(p)

}

my_histogram("Sepal.Length","Species","iris") 

但是出现错误:invalid 'envir' argument of type 'character'. I think the program doesn't know where to look for this myf`字符串。我该如何解决这个问题还是有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

这一点的读者应该知道这个问题已经完全从早期版本变异,并且不再与这个答案真正匹配。新问题的答案出现在评论中。

没有名为Sepal.Length的对象。 (所以R甚至在调用my_function之前就会产生错误。)只有一个列名,需要引用它才能将它传递给函数。 (无法创建数据对象,因为该URL无法传递数据。为什么不使用iris数据对象的内置副本?

您还需要从myvarfac构建公式。公式是表达式并在不评估其标记的情况下进行解析。您需要在函数内部构建一个类似于~Sepal.Length|Species的公式,然后将其传递给直方图调用。咨询?as.formula