如何将父函数参数值替换到子函数并写入文件?
解决方案
核心思路
要实现将parent_fn传入的参数(含默认值)替换到子函数xy的函数体中,关键是在创建xy函数时,就把函数体内的变量符号替换为实际参数值,而非让xy保留对外部变量的闭包引用。
代码实现
假设你原本的函数结构如下,直接修改parent_fn即可实现需求:
create_file_from_function <- function(fn, path) { writeLines(deparse(fn), path) } parent_fn <- function(x = 5, y = 1) { # 用substitute替换函数体中的变量为实际参数值 replaced_body <- substitute(a + b, list(a = x, b = y)) # 创建空函数并替换其函数体 xy <- function() {} body(xy) <- replaced_body # 写入文件 create_file_from_function(xy, "fn.R") }
效果验证
- 调用
parent_fn()后,fn.R中的内容为:function() { 5 + 1 } - 调用
parent_fn(x = 10)后,fn.R中的内容为:function() { 10 + 1 } - 调用
parent_fn(x = 20, y = 7)后,fn.R中的内容为:function() { 20 + 7 }
原理说明
substitute(a + b, list(a = x, b = y))会将表达式a + b中的a和b替换为parent_fn当前传入的x、y实际值(包括默认值),生成新的表达式。随后将这个新表达式赋值给xy函数的函数体,这样deparse时就会输出替换后的具体数值,而非变量符号。
内容的提问来源于stack exchange,提问作者user16024709
相关产品推荐
相关产品推荐

