Error in `[.data.table`(data, , lhs, with = FALSE) : 列不存在


> 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函数无法找到列的问题。希望对你有帮助!如果还有其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^