从列表中提取值时出错

时间:2018-07-12 09:49:42

标签: r list extract

我在提取值时遇到问题。我正在使用R中的“距离”包进行距离采样并计算鸟类的种群密度估计值。我的代码通过将检测函数拟合到观测数据而工作,并尝试了危险率(hr)和半正态(hn)函数,每种函数都会导致密度估计以及相应的AIC和标准误差值。应该选择AIC较低的功能。

在我的代码中,将这两个函数拟合并计算出密度估计后,输出为7个列表,其中包含字符,几个数据框和一些数值。

由此,我试图提取一些值以创建一种汇总表,然后将其写入我的文件夹。这是通过使用函数来完成的。使用方括号选择所需的值时,出现“下标超出范围”的错误。我已经分别运行了该函数的各行,并且每一行都起作用,所以让我感到困惑的是,为什么当我整体运行该函数时行不起作用。

输出在这里(http://www.filedropper.com/output_2),下面是代码。这两个ifelse语句将选择正确的密度估计。进行拟合优度(gof)测试,如果这些值小于0.05,则将模型丢弃。

非常感谢,

奥斯卡

count <- 0
av.densities <- lapply(densities, function(E){
  count <<- count + 1
  cat(count,'\n')
  tmp <- NULL
  try({
    S <- E[[count]][["species"]]
    Areas <- as.character(D[[count]][["density_hn"]][["Label"]])
    D_hn <- E[[count]][["density_hn"]][["Estimate"]]
    se_hn <- E[[count]][["density_hn"]][["se"]]
    hnAIC <- as.numeric(E[[count]][["AIC_hn"]])
    gof_hn <- as.numeric(E[[count]][["gof.hn"]])
    D_hr <- E[[count]][["density_hr"]][["Estimate"]]
    se_hr <- E[[count]][["density_hr"]][["se"]]
    hrAIC <- as.numeric(E[[count]][["AIC_hr"]])
    gof_hr <- E[[count]][["gof.hr"]]
    density <- as.numeric("")
    if(hnAIC < hrAIC && gof_hn > 0.05) {
      density <- D_hn
    } else if(hnAIC < hrAIC && gof_hn <= 0.05 && gof_hr > 0.05) {
      density <- D_hr
    } else if(hnAIC < hrAIC && gof_hn <= 0.05 && gof_hr <= 0.05) {
      density <- 9999
    } else if(hrAIC < hnAIC && gof_hr > 0.05) {
      density <- D_hr
    } else if(hrAIC < hnAIC && gof_hr <= 0.05 && gof_hn > 0.05){
      density <- D_hn
    } else if(hrAIC <- hnAIC && gof_hr <= 0.05 && gof_hn <= 0.05) {
      density <- 9999
    }
    se <- as.numeric("")
    if (hnAIC < hrAIC) {
      se <- se_hn
    } else {
      se <- se_hr
    }

    density_summary <<-data.frame(species=S,Altitude=Areas,density=density,se)

    tmp <- data.frame(Species = S, Altitude = Areas, density, se)
    write.table(av.densities, file = paste0('ElevationDensities/',S,'.csv'), row.names = F, sep = ",")
  })
  return(tmp)
})

0 个答案:

没有答案