R语言函数内数据集列引用的简化实现方法咨询
更简便的R函数内引用数据集列的方法
针对你目前的需求,有几种更简洁的方式可以替代手动匹配列序号的操作:
方法1:直接用[[ ]]提取列
R里的列表/数据框支持用字符串直接通过[[ ]]提取对应列,完全不需要match步骤,代码可以简化成:
linear_regression <- function(variable1, variable2, dataset){ # 直接用字符串索引提取列 var1 <- dataset[[variable1]] var2 <- dataset[[variable2]] lm_out <- lm(var1 ~ var2, data = dataset) return(summary(lm_out)) } linear_regression('mpg', 'cyl', mtcars)
方法2:动态构造公式对象
如果不想提前提取变量,还可以直接在函数里把传入的字符串变量名拼成回归公式,再转成公式对象传给lm,代码更紧凑:
linear_regression <- function(variable1, variable2, dataset){ # 构造公式字符串并转为公式对象 formula_str <- paste(variable1, "~", variable2) lm_out <- lm(as.formula(formula_str), data = dataset) return(summary(lm_out)) } linear_regression('mpg', 'cyl', mtcars)
可选:支持不带引号的变量名(非标准求值)
如果想让函数调用时不用加引号(比如linear_regression(mpg, cyl, mtcars)),可以用rlang包的非标准求值工具,代码如下:
library(rlang) linear_regression <- function(variable1, variable2, dataset){ # 将输入的符号转为字符串 var1_str <- as_name(ensym(variable1)) var2_str <- as_name(ensym(variable2)) # 构造公式 formula_str <- paste(var1_str, "~", var2_str) lm_out <- lm(as.formula(formula_str), data = dataset) return(summary(lm_out)) } # 调用时无需加引号 linear_regression(mpg, cyl, mtcars)
内容的提问来源于stack exchange,提问作者Liam Haller
相关产品推荐
相关产品推荐

