> data[which(data$fcr < 1.2 | data$fcr > 4), "fcr"] <- NA
> data[which(data$entry_wt < 200), "entry_wt"] <- NA
> Traits <- colnames(data)[10]
> traits1 <- vector()
> z <- 1
> for (i in Traits) {
+ z=z+1
+ traits1=Traits[z:length(Traits)]
+ for (j in traits1){
+ modela <- asreml(
+ formula(paste("fixed=cbind(",i,",",j,") ~ trait+at(trait):Generation",sep="")) ,
+ random = ~ us(trait):vm(ID, ainv),
+ residual = ~ id(units):us(trait),
+ data = data,
+ workspace = "15gb",
+ na.action = na.method(x = "include", y = "include"),
+ maxit = 1000
+ )
+
+ summary(modela)$varcomp
+ rA=vpredict(modela,formula(paste("A_",i,"__",j," ~ V2 / sqrt(V1 * V3)",sep="")))
+
+ #df1=rbind(df1,rA)
+ rP=vpredict(modela,formula(paste("P_",i,"__",j," ~ (V2+V6)/sqrt((V1+V5)*(V3+V7))",sep="")))
+ #df2=rbind(df2,rP)
+
+
+ }
+ }
Error in `[.data.table`(data, , lhs, with = FALSE) : 列不存在
data数据集列名正确,fcr列存在.
【以下回答由 GPT 生成】
这个错误提示是因为data.table
包中的[.data.table
函数无法正确找到要操作的列。这可能是因为你使用了which()
函数来选择要操作的行,但却使用了列的名称来进行列操作。 你可以尝试修改代码,将which()
函数中选择的行改为直接使用布尔向量进行选择,并使用列的索引而不是名称来进行列操作。具体步骤如下:
# 将选择行的代码修改为使用布尔向量进行选择
data[data$fcr < 1.2 | data$fcr > 4, "fcr"] <- NA
data[data$entry_wt < 200, "entry_wt"] <- NA
Traits <- colnames(data)[10]
traits1 <- vector()
z <- 1
# 修改循环部分的代码
for (i in Traits) {
z=z+1
traits1<-Traits[z:length(Traits)]
for (j in traits1){
modela <- asreml(
formula(paste("fixed=cbind(",i,",",j,") ~ trait+at(trait):Generation",sep="")) ,
random = ~ us(trait):vm(ID, ainv),
residual = ~ id(units):us(trait),
data = data,
workspace = "15gb",
na.action = na.method(x = "include", y = "include"),
maxit = 1000
)
summary(modela)$varcomp
rA=vpredict(modela,formula(paste("A_",i,"__",j," ~ V2 / sqrt(V1 * V3)",sep="")))
#df1=rbind(df1,rA)
rP=vpredict(modela,formula(paste("P_",i,"__",j," ~ (V2+V6)/sqrt((V1+V5)*(V3+V7))",sep="")))
#df2=rbind(df2,rP)
}
}
通过这个修改,你应该能够解决[.data.table
函数无法找到列的问题。希望对你有帮助!如果还有其他问题,请随时提问。