R for 循环错误:下标越界

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

请帮我修复这个 for 循环。

要下载数据,请输入以下命令,请注意“用户名”和“密码”需要替换为人类死亡率数据库中的日志信息。您可以访问网站 https://mortality.org/ 并创建帐户(需要不到 30 秒)。

library(demography)
library(splines)

#Read Japan mortality data from the Human Mortality Database
JPNmort <- hmd.mx("JPN","username","password")

age = 2:110

data1= cbind(1:109, 
                 JPNmort[["rate"]][["total"]][age, "2016"], 
                 JPNmort[["pop"]][["total"]][age, "2016"])
data2 = cbind(1:109, 
                   JPNmort[["rate"]][["total"]][age, "2017"],
                   JPNmort[["pop"]][["total"]][age, "2017"])



#Reformat data rows and columns
column.names = c("Age", "mu_x", "Ec_x")
rownames(data1) = NULL
rownames(data2) = NULL

colnames(data1) = column.names
colnames(data2) = column.names

spars.values <- seq(from = 0, to = 1, by = 0.001)
hyper_param_spars = expand.grid(spars.values, 
                                c(0))
colnames(hyper_param_spars) = c("spar", "Error.Rate")

# list to store the results
sm.spar <- vector("list", nrow(hyper_param_spars))
sm.spline <- vector("list", nrow(hyper_param_spars))

for(i in 1:nrow(hyper_param_spars)) {
  
  sm.spar[[i]] <- unlist(hyper_param_spars[i, 1])
  sm.spline[[i]] <- smooth.spline(training[, "Age"], 
                                  training[, "mu_x"], 
                                  spar = sm.spar[[i]] )


  # MSE
  hyper_param_spars$Error.Rate[i] <- mean((validation[, "mu_x"] - fitted(sm.spline[[i]]) )^2)
}

Error in data1[, "Ages"] : subscript out of bounds

# optimal spar 
optim.spar = hyper_param[which.min(hyper_param_spars$Error.Rate),1]

当我不断收到错误消息“Data1[,“Age”] 中的错误:下标超出范围”时

r for-loop smoothing spline
1个回答
0
投票

将数据集发布到

github
或其他方式并提供直接链接。 共享完整的回溯也很有用。

当您从代码中删除该行(倒数第四行)时,错误消息会消失吗?

Error in data1[, "Ages"] : subscript out of bounds

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