如何在R函数中传入数据框列名作为参数?
问题核心
你遇到的问题是dfprod$x_var会被R解析为寻找名为x_var的列,而非你传入的参数对应的列,这才导致返回NA并触发警告。以下是几种可行的解决方式:
方法1:基础R - 传入字符串参数
将列名以字符串形式传入函数,用[[替代$来索引数据框列([[支持用字符串动态索引,$只支持字面量列名):
dfprod <- data.frame("demand" = c(59000, 51000, 40000, 29000, 20000)) my_fun <- function(x_var) { mean(dfprod[[x_var]]) } my_fun("demand") # [1] 39800
方法2:基础R - 传入未加引号的列名
如果想直接传入demand(不加引号),可以用substitute()捕获传入的符号并转为字符串,再通过[[访问列:
dfprod <- data.frame("demand" = c(59000, 51000, 40000, 29000, 20000)) my_fun <- function(x_var) { col_name <- as.character(substitute(x_var)) mean(dfprod[[col_name]]) } my_fun(demand) # [1] 39800
方法3:tidyverse风格(推荐)
若使用tidyverse工具包,{{ }}(注入操作符)可以直接实现非标准求值,写法更简洁:
library(dplyr) dfprod <- data.frame("demand" = c(59000, 51000, 40000, 29000, 20000)) my_fun <- function(x_var) { dfprod %>% summarise(mean_val = mean({{ x_var }})) %>% pull(mean_val) } my_fun(demand) # [1] 39800
你之前尝试{{ x_var }}无效,是因为它仅适用于tidyverse的非标准求值场景,直接放在$后无法生效。
内容的提问来源于stack exchange,提问作者Sebastian
相关产品推荐
相关产品推荐

