den folgenden CodeR: tiefe Kopie ein Funktionsargument
i = 3
j = i
i = 4 # j != i
Jedoch betrachte, was ich will, ist
i = 3
f <- function(x, j=i)
x * j
i = 4
f(4) # 16, but i want it to be 12
Falls Sie sich fragen, warum ich dies tun wollen Sie diesen Code in Erwägung ziehen könnte - Die Anwendung ist ein Modell mit mehreren Dekrementierungen. Die Diagonalen einer Übergangsmatrix sind die Summe der anderen Dekremente in dieser Reihe. Ich möchte die Verringerungen definieren Ich brauche als die anderen Funktionen berechnen diese Verringerungen verwenden. In diesem Fall muss ich nur uxt01 und uxt10 und von diesen möchte ich die Funktionen uxt00 und uxt11 produzieren. Ich wollte etwas, das zu höheren Dimensionen skaliert.
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
}
Können Sie genauer erklären, warum Sie dies tun wollen? – joran
Dies hat nichts mit tief oder flach Kopieren zu tun. –