在使用dplyr的R函数中引用和取消引用变量名时出现问题。已经浏览过这个网站和哈德利的
Programming with dplyr
网站,它仍然得到最好的我。
功能代码
不起作用
是:
gcreatedata <- function(dataframe,depvar,iv1,iv2){
depvar <- enquo(depvar)
iv1 <- enquo(iv1)
iv2 <- enquo(iv2)
newdata <- dataframe %>%
mutate(!!iv1 := factor(!!iv1)) %>%
group_by(!!iv1, !!iv2) %>%
summarise(TheMean = mean(!!depvar,na.rm=TRUE),
TheSD = sd(!!depvar,na.rm=TRUE),
TheSEM = sd(!!depvar,na.rm=TRUE)/sqrt(length(!!depvar)),
CI95Muliplier = qt(.95/2 + .5, length(!!depvar)-1))
return(as_tibble(newdata))
}
使用调用它
mtcars
是的
sss <- gcreatedata(mtcars,mpg,am,cyl)
我只是想转换变量
am
到ggplot中下游使用的系数。是的,我知道我可以在输入函数之前完成,但我希望它是通用的。如果运行此版本,可以看到该函数在减去因子步骤后的效果很好。
gcreatedata <- function(dataframe,depvar,iv1,iv2){
depvar <- enquo(depvar)
iv1 <- enquo(iv1)
iv2 <- enquo(iv2)
newdata <- dataframe %>%
mutate(foo := factor(!!iv1)) %>%
group_by(foo, !!iv2) %>%
summarise(TheMean = mean(!!depvar,na.rm=TRUE),
TheSD = sd(!!depvar,na.rm=TRUE),
TheSEM = sd(!!depvar,na.rm=TRUE)/sqrt(length(!!depvar)),
CI95Muliplier = qt(.95/2 + .5, length(!!depvar)-1))
return(as_tibble(newdata))
}
sss <- gcreatedata(mtcars,mpg,am,cyl)
它会返回我想要的,除了
是
已成为
foo
如何在这行代码中找到正确的名称
mutate(!!iv1 := factor(!!iv1)) %>%
现在我得到一个
Error: LHS must be a name or string
尽管有各种各样的组合,我还是想不出有什么好赌的。
提前谢谢。