' newdata'有10000行,但找到的变量有40000行

时间:2017-04-30 13:55:37

标签: r predict

我收到了错误:' 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

1 个答案:

答案 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)

此处我合并了trainLabeltrainData,因此lda引用了具有正确变量名称的正确数据框。

同样,一个可重复的例子会很好。