【发布时间】:2014-08-31 05:23:24
【问题描述】:
我已经在互联网上搜索了几个小时试图解决以下错误:
Error in Dataset[i, Year] : subscript out of bounds
下面是我的代码产生错误的部分:
for(i in (2*YF):1){
if(Dataset[i,Year] < 0){
Dataset[i,Total_Births] <- Dataset[i,Male_Births] + Dataset[i,Female_Births]
}else{
Dataset[i,Total_Births] <- with(Dataset, sum(Dataset[Female_Births > (i-AEB) & Female_Births <= (i-ABB),Female_Births]))
Dataset[i,Male_Births] <- MBR * Dataset[i,Total_Births]
Dataset[i,Female_Births] <- FBR * Dataset[i,Total_Births]
}
}
“年份”以 500 开始,以 -500 结束,跳过 0。
我需要从下往上填充列。
任何帮助将不胜感激。
以下是完整代码:
#DECLARE PARAMETERS
YF <- 500 #Years Ago Flood Occurred
FBR <- .5 #Historical Female Birth Rate
MBR <- (1-FBR) #Historical Male Birth Rate
ABF <- 12 #Average Births per Female
AL <- 60 #Average Lifespan
NF <- 4 #Number of Females at Debark
NM <- 4 #Number of Males at Debark
NAD <- 40 #Noah's Age at Debark
NWA <- 40 #Emzara's (Noah's Wife) Age at Debark
SA <- 35 #Shem's (Noah's Son) Age at Debark
SWA <- 35 #Sedeqetelebab's (Shem's Wife) Age at Debark
HA <- 30 #Ham (Noah's Son) Age at Debark
HWA <- 30 #Ne'elatama'uk's (Ham's Wife) Age at Debark
JA <- 25 #Japheth (Noah's Son) Age at Debark
JWA <- 25 #Adataneses's (Japheth's Wife) Age at Debark
CP <- 20 #Current Population of World Today
ABB <- 18 #Age Begin Births
AEB <- 30 #Age End Births
###CREATE MATRIX - YEAR###
YearA <- YF:1
YearB <- -1:-YF
Year <- c(YearA,YearB)
###POPULATE BIRTHS DATA###
BF_Male_Births <- rep.int(0,YF)
BF_Female_Births <- rep.int(0,YF)
BF_Male_Births[NAD] <- 1
BF_Female_Births[NWA] <- 1
BF_Male_Births[SA] <- 1
BF_Female_Births[SWA] <- 1
BF_Male_Births[HA] <- 1
BF_Female_Births[HWA] <- 1
BF_Male_Births[JA] <- 1
BF_Female_Births[JWA] <- 1
BF_Total_Births <- rep.int(0,YF)
AF_Male_Births <- rep.int(0,YF)
AF_Female_Births <- rep.int(0,YF)
AF_Total_Births <- c(rep.int(4,9),rep.int(3,3),rep.int(0,(YF-12))) #make parameters for 9,3,12
Male_Births <- c(AF_Male_Births,BF_Male_Births)
Female_Births <- c(AF_Female_Births,BF_Female_Births)
Total_Births <- c(AF_Total_Births,BF_Total_Births)
Total_Births <- rep.int(0,YF)
Births <- cbind(Male_Births,Female_Births,Total_Births)
Dataset <- cbind(Year,Births)
for(i in (2*YF):1){
if(Dataset[i,Year] < 0){
Dataset[i,Total_Births] <- Dataset[i,Male_Births] + Dataset[i,Female_Births]
}else{
Dataset[i,Total_Births] <- with(Dataset, sum(Dataset[Female_Births > (i-AEB) & Female_Births <= (i-ABB),Female_Births]))
Dataset[i,Male_Births] <- MBR * Dataset[i,Total_Births]
Dataset[i,Female_Births] <- FBR * Dataset[i,Total_Births]
}
}
【问题讨论】:
-
你看
Dataset了吗?它是一个 4x1 矩阵,填充了 1000。它只有 4 行,您尝试从 1000 索引到 1。另外,您是否在其他地方定义了“Total_Births”、“Male_Births”、“Female_Births”?它的代码也缺少其他变量,因此无法运行。 -
1)这是一个 1000x2 矩阵 2)"Year","Total_Births","Male_Births","Female_Births" 是列名 3)我不打算让它可运行 - 我可以做到如果你愿意,可以运行
-
好吧,在上面粘贴的代码中
dim(Dataset)是 4x1。很明显,这不是您所期望的。 -
它绝对是 1000x4 - 不管我添加了完整的代码并删除了导致混淆的两行。
标签: r loops for-loop matrix subscript