You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言自定义函数如何传入字符串形式的mutate操作作为参数并执行?

原因说明

你之前的写法中,eval(parse(text = mutation))仅返回了计算后的数值结果,mutate无法识别到赋值语句左侧的列名,因此默认将整个函数调用作为新列名,才会出现多余的列、原有列未修改的问题。

解决方案

推荐使用rlang的表达式注入语法实现,代码如下:

library(rlang)
library(dplyr)
library(gapminder)

update_mut <- function(df, mutation) {
  df %>% 
    mutate(!!!parse_exprs(mutation))
}

parse_exprs()会将输入的字符串转换为表达式列表,!!!操作符会将表达式展开为mutate的原生参数,效果和你直接手动写mutate参数完全一致。

测试效果

运行如下代码即可得到预期结果:

res <- update_mut(gapminder, "year = 2*year")

得到的res和gapminder %>% mutate(year = 2*year)完全相同,原有year列被更新,无多余列。

多突变支持

该写法天然支持同时传入多个突变规则,用逗号分隔即可:

res <- update_mut(gapminder, "year = 2*year, pop = pop / 1000, gdpPercap = log(gdpPercap)")
注意事项

字符串转表达式执行存在代码注入风险,仅在你完全控制mutation参数输入来源的场景下使用。

内容的提问来源于stack exchange,提问作者FZS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 18:24:04