我一直在尝试运行 R 的 Yasso20 模型实现(https://github.com/YASSOmodel/Yasso20/blob/main/model/Yasso20.r)
我正在使用以下数据测试函数
Yasso20
:
https://github.com/YASSOmodel/Ryassofortran/tree/master/data
如:
Yasso20(YParameters = sample_parameters,
SimulationTime = sample_data_run$time,
MonthlyTemperature = sample_data_run$temp,
Precipitation = sample_data_run$prec,
InitialCPool = sample_data_run$init,
LitterInput = sample_data_run$litter,
WoodySize = sample_data_run$wsize,
leac = sample_data_run$leac,
SS_pred = TRUE)
但我得到:
Error in if (tem <= 1e-16) { : the condition has length > 1
我想也许这个函数应该在每个时间步的循环中使用,所以我尝试测试:
Yasso20(YParameters = sample_parameters,
SimulationTime = sample_data_run$time[1],
MonthlyTemperature = sample_data_run$temp[1],
Precipitation = sample_data_run$prec[1],
InitialCPool = sample_data_run$init[1],
LitterInput = sample_data_run$litter[1],
WoodySize = sample_data_run$wsize[1],
leac = sample_data_run$leac[1],
SS_pred = TRUE)
再远一点:
Error in h(simpleError(msg, call)) :
error in evaluating the argument 'x' in selecting a method for function 'as.array': replacement has length zero
但是,我不确定这是正确的方法。 在我看来,输入数据的格式应该不同。
我希望有人知道哪些示例数据可用于运行此函数,或者它应该具有哪种格式。
如果您查看 GitHub 上的代码,您会发现大部分输入都得到了很好的描述。您遇到了一个问题。
Error in if (tem <= 1e-16) { : the condition has length > 1
如果复制 GitHub 代码,将第 68-72 行更改为以下内容,然后再次 source 该函数,即可解决该错误:
if(any(tem <= 1e-16))
{
xt <- init + b*t;
return(xt);
}
然后我得到了运行的函数:
Yasso20(YParameters = sample_parameters,
SimulationTime = sample_data_run$time,
MonthlyTemperature = sample_data_run$temp[1,],
Precipitation = sample_data_run$prec[1],
InitialCPool = sample_data_run$init,
LitterInput = sample_data_run$litter[1,],
WoodySize = sample_data_run$wsize,
leac = sample_data_run$leac[1],
SS_pred = TRUE)
产生 5 个零的向量。这是否是预期的结果,我不知道。