我知道有人问过类似的问题,我尝试了多种选项,但仍然收到错误消息。
df_construction <- function(selected_month, selected_variable){
selected_variable_en <- rlang::enquo(selected_variable) #This was an attempt following the link
#filter_criteria <- interp(!is.na(~y), .values = list(y = as.name(selected_variable))) This doesn't work
df1 <- airquality %>%
dplyr::filter(Month == selected_month,
!is.na(selected_variable_en))%>%
select(Month, Day, !!selected_variable)
return(df1)}
df1 <- df_construction(2, "Solar.R")
我的最终目标是在Shiny中构建它,从而让用户在函数中选择输入作为参数。
我知道filter
和select
函数不应该以相同的方式处理。
我按照以下步骤进行了操作:https://www.brodrigues.co/blog/2016-07-18-data-frame-columns-as-arguments-to-dplyr-functions/但是由于CCD_ 3滤波器而没有成功。
我只想有一个数据帧,其中只有所选月份的Month
列、Day
列和用户选择的Ozone, Solar.R, Wind, Temp
中的任何一列,没有任何NA
非常感谢你的帮助!!
!!
通常不足以取消变量名的引用。您经常需要将它们与rlang::sym
结合使用。如果有多个变量要取消引用,则需要使用!!!
和rlang::syms
df_construction <- function(selected_month, selected_variable){
df1 <- airquality %>%
dplyr::filter(Month == selected_month,
!is.na(!!rlang::sym(selected_variable_en)))%>%
select(Month, Day, selected_variable)
return(df1)
}
对于select
,可以直接放入变量名。dplyr
中有一个新功能,可以取消对{{}}
的引用,但它并不适用于所有情况。
如果您开始在函数中编写变量名,那么dplyr
可能会遇到困难。在这方面,data.table
更容易使用(参见我写的关于这个主题的博客文章(