我创建了一个简单的循环来计算某些模拟数据的效率。它作为一个循环表现得非常好:
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)
非常感谢任何帮助
答案 0 :(得分:1)
您需要将对象作为参数传递给嵌套函数。
在function_NSEsums.r脚本中,将第一行更改为.jumbotron {
margin-top: 20px;
}
在example_script.r中,将代码更改为以下内容:
NSEsums <- function(i, Qobs, Qsim) {