r-dplyr通过is.na过滤器将列名作为变量传递



我知道有人问过类似的问题,我尝试了多种选项,但仍然收到错误消息。

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中构建它,从而让用户在函数中选择输入作为参数。

我知道filterselect函数不应该以相同的方式处理。

我按照以下步骤进行了操作: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更容易使用(参见我写的关于这个主题的博客文章(

相关内容

最新更新