使用 R 中的函数更新问题
Updating Issue Using Function in R
我的代码有更新问题,希望更精通 "functions" R 的人能够解决这个问题。正如您在此处看到的,变量 "R" 发生变化,并且在 FuncTest 中调用该变量时,仅使用 2.05 的 R 值。这就是为什么前 3 个值产生所需的输出然后一切都从那里走下坡路。这将如何修改?
R <- t(c(2.05, 2.05, 2.05, 2.55, 2.55, 2.55, 2.95, 2.95, 2.95))
P <- 6447.88
EnvTest <- new.env()
EnvTest$Orig <- 548453.5
FuncTest <- function(pp){
EnvTest$Orig <- EnvTest$Orig-(P-EnvTest$Orig*R[pp]/1200)
return(EnvTest$Orig)
}
Test<- rbind(EnvTest$Orig,
do.call(rbind,lapply(1:9, FuncTest)))
x <- t(Test)
x
这给出了输出:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 548453.5 542942.6 537422.2 531892.4 526574.8 521245.9 515905.7 510726.1 505533.7 500328.6
期望的输出是:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 548453 542942 537422 532116 526799 521470 516304 511126 505934 500941
更新
我正在尝试使用 EnvTest$Orig 的更新值来计算 10 个不同值的 EnvTest$Orig。为此,我使用变量 "R"。 "x" 的输出正确地产生了前三个结果。但如您所见,变量 R 在前三个输入后从 2.05 变为 2.55。我的函数没有正确使用新的 "R" 值,而是继续使用 2.05 而不是 2.55。这在下面的代码中显示,它试图计算所需输出中的第 4 列。很明显,"Proof2" 正确执行,而 "Proof" 表明我的函数仅使用变量 "R" 的第一个实例。
Proof <- 537422-(P-(537422*2.05/1200))
Proof
给出的答案是 531892.2 但它应该是 532116,如下所示。
Proof2 <- 537422-(P-(537422*2.55/1200))
Proof2
更新第 2 轮
函数没有问题,但变量 "R" 没有问题,这就是我无法获得所需输出的原因。非常感谢 RHertel。
我仍然不明白为什么您认为您的功能无法正常工作。
作为检查,您可以在每次迭代时打印出相关变量:
R <- c(2.05, 2.05, 2.05, 2.55, 2.55, 2.55, 2.95, 2.95, 2.95)
P <- 6447.88
EnvTest <- new.env()
EnvTest$Orig <- 548453.5
FuncTest <- function(pp){
EnvTest$Orig <- EnvTest$Orig-(P-EnvTest$Orig*R[pp]/1200)
cat("pp=",pp,"\n")
cat("R[pp]=",R[pp],"\n")
cat("EnvTest$Orig",EnvTest$Orig,"\n")
return(EnvTest$Orig)
}
Test <- sapply(1:9, FuncTest)
#pp= 1
#R[pp]= 2.05
#EnvTest$Orig 542942.6
#pp= 2
#R[pp]= 2.05
#EnvTest$Orig 537422.2
#pp= 3
#R[pp]= 2.05
#EnvTest$Orig 531892.4
#pp= 4
#R[pp]= 2.55
#EnvTest$Orig 526574.8
#pp= 5
#R[pp]= 2.55
#EnvTest$Orig 521245.9
#pp= 6
#R[pp]= 2.55
#EnvTest$Orig 515905.7
#pp= 7
#R[pp]= 2.95
#EnvTest$Orig 510726.1
#pp= 8
#R[pp]= 2.95
#EnvTest$Orig 505533.7
#pp= 9
#R[pp]= 2.95
#EnvTest$Orig 500328.6
我的代码有更新问题,希望更精通 "functions" R 的人能够解决这个问题。正如您在此处看到的,变量 "R" 发生变化,并且在 FuncTest 中调用该变量时,仅使用 2.05 的 R 值。这就是为什么前 3 个值产生所需的输出然后一切都从那里走下坡路。这将如何修改?
R <- t(c(2.05, 2.05, 2.05, 2.55, 2.55, 2.55, 2.95, 2.95, 2.95))
P <- 6447.88
EnvTest <- new.env()
EnvTest$Orig <- 548453.5
FuncTest <- function(pp){
EnvTest$Orig <- EnvTest$Orig-(P-EnvTest$Orig*R[pp]/1200)
return(EnvTest$Orig)
}
Test<- rbind(EnvTest$Orig,
do.call(rbind,lapply(1:9, FuncTest)))
x <- t(Test)
x
这给出了输出:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 548453.5 542942.6 537422.2 531892.4 526574.8 521245.9 515905.7 510726.1 505533.7 500328.6
期望的输出是:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 548453 542942 537422 532116 526799 521470 516304 511126 505934 500941
更新
我正在尝试使用 EnvTest$Orig 的更新值来计算 10 个不同值的 EnvTest$Orig。为此,我使用变量 "R"。 "x" 的输出正确地产生了前三个结果。但如您所见,变量 R 在前三个输入后从 2.05 变为 2.55。我的函数没有正确使用新的 "R" 值,而是继续使用 2.05 而不是 2.55。这在下面的代码中显示,它试图计算所需输出中的第 4 列。很明显,"Proof2" 正确执行,而 "Proof" 表明我的函数仅使用变量 "R" 的第一个实例。
Proof <- 537422-(P-(537422*2.05/1200))
Proof
给出的答案是 531892.2 但它应该是 532116,如下所示。
Proof2 <- 537422-(P-(537422*2.55/1200))
Proof2
更新第 2 轮
函数没有问题,但变量 "R" 没有问题,这就是我无法获得所需输出的原因。非常感谢 RHertel。
我仍然不明白为什么您认为您的功能无法正常工作。 作为检查,您可以在每次迭代时打印出相关变量:
R <- c(2.05, 2.05, 2.05, 2.55, 2.55, 2.55, 2.95, 2.95, 2.95)
P <- 6447.88
EnvTest <- new.env()
EnvTest$Orig <- 548453.5
FuncTest <- function(pp){
EnvTest$Orig <- EnvTest$Orig-(P-EnvTest$Orig*R[pp]/1200)
cat("pp=",pp,"\n")
cat("R[pp]=",R[pp],"\n")
cat("EnvTest$Orig",EnvTest$Orig,"\n")
return(EnvTest$Orig)
}
Test <- sapply(1:9, FuncTest)
#pp= 1
#R[pp]= 2.05
#EnvTest$Orig 542942.6
#pp= 2
#R[pp]= 2.05
#EnvTest$Orig 537422.2
#pp= 3
#R[pp]= 2.05
#EnvTest$Orig 531892.4
#pp= 4
#R[pp]= 2.55
#EnvTest$Orig 526574.8
#pp= 5
#R[pp]= 2.55
#EnvTest$Orig 521245.9
#pp= 6
#R[pp]= 2.55
#EnvTest$Orig 515905.7
#pp= 7
#R[pp]= 2.95
#EnvTest$Orig 510726.1
#pp= 8
#R[pp]= 2.95
#EnvTest$Orig 505533.7
#pp= 9
#R[pp]= 2.95
#EnvTest$Orig 500328.6