使用R中的函数更新问题

亚当·沃纳

我的代码有一个更新问题,希望有人对R中的“函数”更为精通。如您所见,变量“ R”发生变化,并且在FuncTest中调用该变量时,仅使用2.05的R值。这就是为什么前三个值产生所需输出,然后全部都从那里下降的原因。这将如何修改?

 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

第二轮更新

函数没有问题,而是变量“ 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 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章