函数中for循环的输出不正确

时间:2017-01-31 16:06:31

标签: r function for-loop

我创建了一个简单的循环来计算某些模拟数据的效率。它作为一个循环表现得非常好:

NSE_cal <- NULL

for(i in 1:6) {
 Qobs <- flowSummary_NSE1[[i]][[3]]
 Qsim <- flowSummary_NSE1[[i]][[1]]
 object_cal <- NSEsums("NSE")
 NSE_cal <- c(NSE_cal, object_cal)
 }

#NSE_cal
#[1] 0.8466699 0.7577019 0.8128499 0.9163561 0.7868013 0.8462228

但是,我想多次应用这个循环 - 我需要改变对象flowSummary_NSE#并且我有四种不同的转换类型要应用。首先,我将循环放在一个函数中,只需要指定transformation,如下所示:

badFunction <- function(transformation){

 NSE_cal <- NULL

 for(i in 1:6) {
  Qobs <- flowSummary_NSE1[[i]][[3]]
  Qsim <- flowSummary_NSE1[[i]][[1]]
  object_cal <- NSEsums(transformation)
  NSE_cal <- c(NSE_cal, object_cal)
 }
  print(NSE_cal)
}

 badFunction("NSE")
 # [1] 0.8462228 0.8462228 0.8462228 0.8462228 0.8462228 0.8462228

该函数具有与for循环中完全相同的信息输入,除了由于某种原因,它为i的每种情况输出相同的值。

很明显,我做错了什么。但据我所知,它必须是函数本身所包含的简单内容。但是,如果在其他地方出现错误,我附加了生成必要数据和相关函数的代码(here

非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

您需要将对象作为参数传递给嵌套函数。

在function_NSEsums.r脚本中,将第一行更改为.jumbotron { margin-top: 20px; }

在example_script.r中,将代码更改为以下内容:

NSEsums <- function(i, Qobs, Qsim) {