r语言 - 如何解决"不能将类强制到数据帧?



第20行出现问题:x3 <- lm(Salary ~ ...

as.data.frame.default(data(中的错误:无法将类'c("train","train.formula"('强制为data.frame

如何解决?

attach(Hitters)
Hitters
library(caret)
set.seed(123)
# Define training control
set.seed(123) 
train.control <- trainControl(method = "cv", number = 10)
# Train the model
x2 <- train(Salary ~., data = x, method = "lm",
trControl = train.control)
# Summarize the results
print(x)
x3 <- lm(Salary ~ poly(AtBat,3) + poly(Hits,3) + poly(Walks,3) + poly(CRuns,3) + poly(CWalks,3) + poly(PutOuts,3), data = x2)
summary(x3)
MSE = mean(x3$residuals^2)
print("Mean Squared Error: ")
print(MSE)

首先,正如@dcarlson已经提到的,您应该定义x。其次,x3不返回数据帧。如果你运行

str(x2)

您将看到在lm函数中使用的所有元素都是名为trainingData的数据帧的一部分。因此,如果您打算使用lm函数,请将其用作lm函数中的数据源,NOTx2。我已经在下面重写了你的代码。

附言:我远非R专家,所以如果有人想对这个答案进行射击,那就去吧,我总是愿意学习;(

attach(Hitters)
Hitters
library(caret)
set.seed(123)
# Define training control
set.seed(123) 
train.control <- trainControl(method = "cv", number = 10)
# Train the model
x2 <- train(Salary ~., data = x, method = "lm", trControl = train.control)
# Summarize the results
print(x2)
# str(x2) # $trainingData data.frame
x2$trainingData[["AtBat"]]
m <- x2$trainingData
x3 <- lm(Salary ~ poly(AtBat,3) + poly(Hits,3) + poly(Walks,3) + poly(CRuns,3) + poly(CWalks,3) + poly(PutOuts,3), data = m)
summary(x3)
MSE = mean(x3$residuals^2)
cat("Mean Squared Error: ", MSE) # use cat to concatenate text and variable value in one line

最新更新