r - 如何解决“无法将类强制转换为 data.frame?
问题描述
第 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 函数中的数据源,而不是x2。我在下面重写了你的代码。
PS我远不是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
推荐阅读
- activecampaign - ActiveCampaign 中的联系人列表是什么?
- c++ - 我需要一个函数来读取名称并成为最常用的函数
- django - 获取一周中每一天的订单计数
- javascript - 在什么情况下 window.location.search 是未定义的?
- javascript - 数量平方的问题
- python - 使用 Python 3 转换为全角字符,Window 上的 Unicode 错误
- python - 根据 Pandas Dataframes 中的 True/False 确定均值
- pytorch - 使用 Autograd .backward() 函数计算 Pytorch 模型前向传递中的中间值
- javascript - 如何在服务器上混淆 js 脚本
- azure - 在 Azure DevOps 中跨项目创建查询