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


head(data)
data[which(data$fcr < 1.2 | data$fcr > 4), "fcr"] <- NA
data[which(data$entry_wt < 200), "entry_wt"] <- NA
head(data)
df1 <- data.frame()
df2 <- data.frame()
Traits <- colnames(data)[10:11]
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) : 列不存在

【以下回答由 GPT 生成】

根据你提供的代码和错误信息,出现错误的原因是在运行data[which(data$fcr < 1.2 | data$fcr > 4), "fcr"] <- NA这行代码时,程序找不到名为fcr的列。以下是解决问题的步骤:

  1. 首先,我们需要确认fcr列是否存在于data数据集中。可以使用colnames(data)函数来查看data数据集的列名。请在代码中添加以下行:
colnames(data)

并查看输出结果。如果fcr列不在列名中,说明该列确实不存在。

  1. 如果确实不包含fcr列,需要检查数据集的来源,确认数据集是否正确加载。可以使用head(data)函数来查看data数据集的前几行内容,确保数据集中的列与你的预期一致。

  2. 如果fcr列确实不存在,可能是因为列名不正确或者数据集中根本没有这个列。根据你的具体情况,可以进行以下尝试来解决问题:

a. 检查列名是否大小写敏感。在R中,列名是大小写敏感的,所以确保使用正确的大小写。

b. 确认数据集中是否存在fcr列。可以使用names(data)函数获取数据集的列名列表,然后检查是否包含fcr列。

c. 如果数据集中确实没有fcr列,你可能需要重新加载或修改数据集,确保包含所需的列。

  1. 如果经过以上步骤之后,问题仍然存在,那么可能是代码中的其他部分引起了错误。可以逐行检查代码,确保没有其他地方对fcr列进行了重命名或修改。可以加入一些打印语句来输出相关变量的值,以帮助定位问题。例如,可以在代码中添加以下行来输出相关变量的值:
print(data$fcr)

请根据以上步骤逐一检查,并记录输出结果以帮助进一步诊断问题。如果问题仍然存在,或者你遇到了困难,请提供更多的信息以便我们能够更好地帮助你解决问题。


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