我收到了错误:' newdata'有10000行,但找到的变量有40000行
train_frame=data$trainData[,-c(65,81)]
for (i in 1:98){
names(train_frame)[i]<-i
}
lda(data$trainLabel~ train_frame,prior=rep(1,10)/10,method='moment')->lda_equal_prior prediction_frame=data.frame(data$testData[,-c(65,81)])
for (i in 1:98){
names(prediction_frame)[i]<-paste('train_frame',i,sep='')
}
predict(lda_equal_prior,data.frame(prediction_frame))->prediction_lda_equal_prior
答案 0 :(得分:0)
首先,不用数字启动变量名称总是好的做法。其次,我认为这是你编写导致警告的lda
函数的方式(我相信它会发出警告信息,而不是错误)。 lda_equal_prior
中的变量名称是指data
对象(我仍然不确定它是列表还是数据帧)。尽管如此,prediction_frame
没有相同的变量名称,因为您真正想要的是来自train_frame
的变量名称。所以predict
实际上重用了data
中的名称,因此警告。假设data
是一个列表,请尝试:
# Create training frame
train_frame = data.frame(data$trainLabel, data$trainData[,-c(65,81)])
names(train_frame)[-1] = paste0("V", 1:98)
# Run LDA with trainLabel on the rest
lda_equal_prior = lda(trainLabel ~ ., data = train_frame,
prior = rep(1,10)/10, method='moment')
# Create prediction frame
prediction_frame = data.frame(data$testData[,-c(65,81)])
names(prediction_frame) = paste0("V", 1:98)
# Predict using newdata
prediction_lda_equal_prior = predict(lda_equal_prior, newdata = prediction_frame)
此处我合并了trainLabel
和trainData
,因此lda
引用了具有正确变量名称的正确数据框。
同样,一个可重复的例子会很好。