r - 使用字符串选择数据框中的位置来存储值
问题描述
我有一个贯穿模型的循环。该循环生成多个公式,这些公式插入到模型命令中,然后使用buildmer()
. 它使用一个lapply()
函数对名为 Species 的列表中的每个数据帧执行此操作。问题是我需要将结果存储在不同的数据框中,以免混淆。
代码的简化示例是:
lapply(Species, function(x){
for (i in 1:10){
LRm<-buildmer(formula = form.LR, family = 'binomial', control=glmerControl(optimizer="bobyqa"), data=x, crit= c('AIC'), direction = c("order", "backward"))
#Get the species name for current model
ID<-colnames(DIKDIK) %>%
.[grepl("ADULTS",.)]%>%
sub("*.ADULTS", "", .)
paste0(ID)$AIC[i]<-AIC(LRm)
}
})
编辑:form.LR 是为每次迭代重新创建的模型公式,但此代码被省略,因为它无关紧要
很明显,当代码达到 x 的第二个值(即为第二个数据帧运行模型)时,结果将被第一个结果覆盖,因为正在使用与“i”相同的索引。问题就在于此。
请注意,我可以通过选择与“ADULTS”部分匹配的列名来识别使用了哪个数据框,使用grepl()
该列名的完整列名在每个数据框中都是唯一的。所以我想我可以用这个字符串命名每个数据帧,即“GIRAFFE”,并用它来识别数据应该存储在哪里。但我似乎无法找到正确的组合paste()
。而且我什至不确定我正在尝试的是否可行。
当前代码崩溃给出错误
Error in paste0(ID)[[i]] <- NA : could not find function "paste0<-"
到目前为止,我没有找到任何其他解决类似问题的方法。
物种列表对象的简化可重现示例是
ADULTS.GIRAFFE<-rnorm(20, 3, sd=1)
ADULTS.DIKDIK<-rnorm(20, 3, sd=1)
ADULTS.IMPALA<-rnorm(20, 3, sd=1)
presence1<-rbinom(20, 1, .5)
presence2<-rbinom(20, 1, .5)
presence3<-rbinom(20, 1, .5)
var1<-rnorm(20, 3, sd=1)
var2<-rnorm(20, 3, sd=1)
var3<-rnorm(20, 3, sd=1)
a<-cbind(presence1, var1, var2, var3, ADULTS.GIRAFFE)
b<-cbind(presence1, var1, var2, var3, ADULTS.DIKDIK)
c<-cbind(presence1, var1, var2, var3, ADULTS.IMPALA)
Species<-list(a,b,c)
解决方案
将数据框存储为列表允许我将列表中的每个数据框命名为:
snames<-c("DIKDIK","THOMSONS", "GIRAFFE", "GRANTS", "IMPALA")
OutsLR<-lapply(snames, function(x){
x<-data.frame()%>%
insertRows(., 499, new = NA)%>%
mutate(Number=NA)%>%
mutate(AIC=NA)%>%
mutate(Model=NA)
})
#Rename the data frames in the list
names(Outs) = snames
然后使用名为 ID 的字符串对象选择数据框很容易
#Just for the example
ID<-"DIKDIK"
#Then
OutsLR[[ID]][["AIC"]][i]<-AIC(LRm)
推荐阅读
- python-3.x - 如何在 python 编程语言中去除视频剪辑中的噪音?
- flutter - 颤振医生'zsh:找不到命令'
- javascript - 在 v-for vue js 中自动选择第一个选项
- json - 所有领域的“省略”
- sql - 仅当第一次连接没有结果时才连接表
- c# - 日期不与组合选择项目的数据库进行比较
- python - 将 Json 解析为 Pandas 时强制键作为行条目
- kubernetes - Kubernetes:RabbitMQ 客户端无法连接。(指定的端点均不可到达)
- java - AOP 编程 - ProceedingJoinPoint 仅支持环绕建议
- python-3.x - pyqt上的setWidget属性错误