我在提取值时遇到问题。我正在使用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)
})