我想要一个带有参数的函数,例如数据名(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`字符串。我该如何解决这个问题还是有更好的方法吗?
答案 0 :(得分:2)
这一点的读者应该知道这个问题已经完全从早期版本变异,并且不再与这个答案真正匹配。新问题的答案出现在评论中。
没有名为Sepal.Length
的对象。 (所以R甚至在调用my_function
之前就会产生错误。)只有一个列名,需要引用它才能将它传递给函数。 (无法创建数据对象,因为该URL无法传递数据。为什么不使用iris数据对象的内置副本?
您还需要从myvar
和fac
构建公式。公式是表达式并在不评估其标记的情况下进行解析。您需要在函数内部构建一个类似于~Sepal.Length|Species
的公式,然后将其传递给直方图调用。咨询?as.formula