R语言函数传参替换固定字段及动态列调用问题求助
R动态列名操作解决方案
报错原因说明
你收到Error: unexpected '}' in "}"的核心原因是将markdown加粗标记**直接写入了R代码,这属于非法语法字符,R解析器无法识别,实际运行代码时首先要删除所有**标记。
场景1:mutate函数动态指定新列名
dplyr的非标准求值语法下,动态传入字符串作为新列名需要使用:=运算符配合!!sym()处理变量,修改后的函数代码如下:
library(tidyverse) # 需提前定义好全局变量var_length、glm_coef_Death2 z <- function(s){ PF_odds <- glm_coef_Death2[, grepl(s, names(glm_coef_Death2))] %>% gather(key, Relativity) %>% mutate( !!sym(s) := gsub("\\.", "-", substr(key, var_length, nchar(key))), exp_relativity = exp(Relativity) ) return(PF_odds) } # 调用示例 z('B36_Frequency_Of_Premium_Collection')
语法说明:
sym(s)将传入的字符串类型列名转为R可识别的符号对象!!为解引用运算符,将符号对象转为可在mutate中直接使用的列名:=是dplyr提供的动态赋值运算符,专门用于左侧是变量的赋值场景
场景2:动态提取数据框指定列
基础R中$运算符不支持直接传入字符串变量,替换为双中括号语法即可实现动态取值:
# 定义要提取的列名字符串 target_col <- 'B36_Frequency_Of_Premium_Collection' # 动态提取列 PFSummary_pre[[target_col]]
如果使用tidyverse风格写法,也可以用pull函数实现:
PFSummary_pre %>% pull(!!sym(target_col))
内容的提问来源于stack exchange,提问作者VBA_Newbie
相关产品推荐
相关产品推荐

