r - For循环:要替换的项目数不是替换长度的倍数
问题描述
我正在使用 DICE(气候经济)模型处理 R Markdown 文档。
我有一个函数 YPC,它取决于两个变量 tt 和 r。我的目标是获得一个数据框,其中包含 YPC 的所有可能图像(对于 r 和 tt 的所有可能值),其中单元格 YPC[i,j] 包含对于 i=tt 和 j=r 的 YPC 值。对于矩阵的每一行(每个 tt 值),我希望某个值 r=l[tt] 之后的每个单元格都填充值 0。
示例: l[1]=100 ;然后第 100 列之后的第一行的所有单元格都应该用零填充。
我创建我的矩阵并定义它的单元格如下
YPC<-matrix(nrow = NT, ncol = l[100])
for (i in 1:NT){
for (j in 1:l[100]) {
if (j<=l[i]) {
YPC[i,j] <- fYPC(Y, r=j, tt=i)}
else{
YPC[i,j] <- 0}
}
}
当我打印生成的单元格时,我发现它在达到 l[i] 值时效果很好。在 l[i] 值处,它会打印“Inf”和警告消息:要替换的项目数不是替换长度的倍数。在计算结束时,我得到一个“没有循环中断/下一个,跳转到顶层”错误。
我不会在这里写我所有的代码,因为它很长而且只有很少的元素看起来相关。
此外,由于我在这里不使用常规数据集,因此很难提供可重现的示例。我只有模型参数的简单数据,我的代码在此基础上创建几个使用这些参数的方程。
编辑
感谢您的回答。
以下是 fYPC 的定义方式:
fYPC <- function(Y, r, tt=NULL){
if (is.null(tt)){
output=(exp(Y/l+et2*sqrt(2)*erfinv(2*r/l-1))+exp(Y/l+et2*sqrt(2)*erfinv(2(r-1)/l-1)))
}else {
output=(exp(Y[tt]/l[tt]+et2*sqrt(2)*erfinv(2*r/l[tt]-1))+exp(Y[tt]/l[tt]+et2*sqrt(2)*erfinv(2*(r-1)/l[tt]-1)))
}
return(output)
}
在 is.null 部分,Y 是一个值,因此输出的长度也是 1。
在else部分,Y是一个向量,那么Y[tt]和l[tt]的长度都是1,所以最终的输出关于NT,其实可以换成100。而l[i]的定义如下(使用 pop0、popasym、popadj 分别为 100、1000、0.134):
l = pop0
for(i in 2:NT) l[i] <- l[i-1] * (popasym / l[i-1])**popadj
解决方案
推荐阅读
- cs50 - PSET 4 REFLECT 错误未反映最后一行
- python - 运行简单的 Ansible playbook 时出错
- ios - 我该如何解决这个“Invalid `Podfile`”错误?
- azure-service-fabric - Azure Patch Orchestration (POA) 是否在群集“警告”或仅“错误”上被阻止
- python - google colab 上的 Python 图像处理
- javascript - 如何检查 jQuery 中没有文本的空 div?
- node.js - 带有 Wix 客户端的 Node.js Express 服务器?
- html - 如何为下拉菜单下的所有链接设置 Google Tag 触发器?
- php - 已解决使用 Smarty PHP,将代码拆分成更小的部分以使用 include() 调用时出现语法错误
- google-drive-api - Google Drive Python API:添加多个属性