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
的列。以下是解决问题的步骤:
fcr
列是否存在于data
数据集中。可以使用colnames(data)
函数来查看data
数据集的列名。请在代码中添加以下行:colnames(data)
并查看输出结果。如果fcr
列不在列名中,说明该列确实不存在。
如果确实不包含fcr
列,需要检查数据集的来源,确认数据集是否正确加载。可以使用head(data)
函数来查看data
数据集的前几行内容,确保数据集中的列与你的预期一致。
如果fcr
列确实不存在,可能是因为列名不正确或者数据集中根本没有这个列。根据你的具体情况,可以进行以下尝试来解决问题:
a. 检查列名是否大小写敏感。在R中,列名是大小写敏感的,所以确保使用正确的大小写。
b. 确认数据集中是否存在fcr
列。可以使用names(data)
函数获取数据集的列名列表,然后检查是否包含fcr
列。
c. 如果数据集中确实没有fcr
列,你可能需要重新加载或修改数据集,确保包含所需的列。
fcr
列进行了重命名或修改。可以加入一些打印语句来输出相关变量的值,以帮助定位问题。例如,可以在代码中添加以下行来输出相关变量的值:print(data$fcr)
请根据以上步骤逐一检查,并记录输出结果以帮助进一步诊断问题。如果问题仍然存在,或者你遇到了困难,请提供更多的信息以便我们能够更好地帮助你解决问题。