【发布时间】:2018-02-07 21:54:16
【问题描述】:
在使用 dplyr 的 R 函数中引用和取消引用变量名时遇到问题。浏览过这个网站以及 Hadley 的 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)
它返回我想要的,除了 am 已变为 foo 我如何在这行代码中获得正确的名称 mutate(!!iv1 := factor(!!iv1)) %>% 现在我收到一条 Error: LHS must be a name or string 消息,尽管如此我想不出骰子的组合方式。
提前致谢。
【问题讨论】: