gpt4 book ai didi

r - R:深复制一个函数参数

转载 作者:行者123 更新时间:2023-12-04 09:36:26 29 4
gpt4 key购买 nike

考虑以下代码

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

如果您想知道为什么要这样做,可以考虑使用以下代码-该应用程序是一个多减量模型。转移矩阵的对角线是该行中其他减量的总和。我想定义所需的减量,而不是使用这些减量计算其他函数。在这种情况下,我只需要uxt01和uxt10,并从中生成函数uxt00和uxt11。我想要一些可以扩展到更高维度的东西。
Qxt <- matrix(c(uxt00=function(t=0,x=0) 0,
uxt01=function(t=0,x=0) 0.05,
uxt10=function(t=0,x=0) 0.07
uxt11=function(t=0,x=0) 0), 2, 2, byrow=TRUE)

Qxt.diag <- function(Qxt) {
ndecrements <- length(Qxt[1,])
for(index in seq(1, N, N+1)) { # 1, 4
Qxt[[index]] <- function(t=0, x=0, i=index, N=ndecrements) {
row <- ceiling(index/ndecr)
row.decrements <- seq( (row - 1)*N + 1, (row)*N)
other.decrements <- row.decrements[which(row.decrements != i]
-sum(unlist(lapply(Qxt.fns[[other.decrements]],
function(f) f(t,x))))
}
}
Qxt.fns
}

最佳答案

在创建函数之后,可以通过为形式参数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

这仅是可能的,因为R是一种很棒的语言,它为您提供对函数的所有三个特殊属性的完整读/写访问权,它们是:
  • 包含正文的解析树: body()
  • 形式参数及其默认值(本身就是解析树): formals()
  • 封闭环境(用于实现封闭): environment()
  • 关于r - R:深复制一个函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31686179/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com