R:函数参数的深度复制

R:函数参数的深度复制,r,arguments,deep-copy,R,Arguments,Deep Copy,考虑以下代码 i = 3 j = i i = 4 # j != i 然而,我想要的是 i = 3 f <- function(x, j=i) x * j i = 4 f(4) # 16, but i want it to be 12 i=3 f这可以通过在创建函数后手动为形式参数j指定默认表达式来实现: i <- 3; f <- function(x,j) x*j; f; ## function(x,j) x*j formals(f); ## $x ## ## #

考虑以下代码

i = 3
j = i
i = 4 # j != i
然而,我想要的是

i = 3
f <- function(x, j=i) 
    x * j
i = 4
f(4) # 16, but i want it to be 12
i=3

f这可以通过在创建函数后手动为形式参数
j
指定默认表达式来实现:

i <- 3;
f <- function(x,j) x*j;
f;
## function(x,j) x*j
formals(f);
## $x
##
##
## $j
##
##
formals(f)$j <- i;
f;
## function (x, j = 3)
## x * j
formals(f);
## $x
##
##
## $j
## [1] 3
##
i <- 4;
f(4);
## [1] 12

i如果要重用
i
,请将其分配给其他变量:

default_value = i
f = function(x, j = default_value)
    x * j
当然,您不应该让这个变量到处乱跑——这和原始代码一样糟糕。但是,您可以通过在本地环境中同时定义这两个函数,使其成为函数的“私有”:

f = local({
    default_value = i
    function(x, j = default_value)
        x * j
})

你能更详细地解释一下你为什么要这样做吗?这与深度或浅层复制无关。
i = 4
f(4) # 12
f = local({
    default_value = i
    function(x, j = default_value)
        x * j
})