Yasso20 R 实施

问题描述 投票:0回答:1

我一直在尝试运行 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

但是,我不确定这是正确的方法。 在我看来,输入数据的格式应该不同。

我希望有人知道哪些示例数据可用于运行此函数,或者它应该具有哪种格式。

r model
1个回答
1
投票

如果您查看 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 个零的向量。这是否是预期的结果,我不知道。

© www.soinside.com 2019 - 2024. All rights reserved.