r语言 - 我在 dat$y 中得到错误:$ 运算符在尝试使用 map() 函数计算可能的结果时对原子向量无效



我目前正在参加在线数据科学:机器学习课程,我们被要求拟合 lm 100 次,并获得不同大小数据集的平均值 (rmse( 和 sd(rmse( 值 n=c(100,500,1000,5000,10000(。 我们被要求创建一个函数,该函数采用大小 n 并构建数据集,然后运行用于拟合 100 个模型的循环,然后设置 seed 并使用 map(( 或 sapply(( 函数将我们的新函数应用于 n 个不同的大小。

我所做的代码在我运行 f1 时向我显示"dat$y 中的错误:$ 运算符对原子向量无效"错误 这是我的代码:

library(MASS)
library(caret)

ff=function(n){
Sigma <- 9*matrix(c(1.0, 0.5, 0.5, 1.0), 2, 2)
dat <- MASS::mvrnorm(n, c(69, 69), Sigma)%>%data.frame() %>% setNames(c("x", "y"))
}
set.seed(1,sample.kind = "Rounding")
n=c(100,500,1000,5000,10000)
f1=map(n,function(dat){
rmse=replicate(100,{
y <- dat$y
test_index <- createDataPartition(y, times = 1, p = 0.5, list = FALSE)
train_set <- dat %>% slice(-test_index)
test_set <- dat %>% slice(test_index)
fit <- lm(y ~ x, data = train_set)
y_hat <- fit$coef[1] + fit$coef[2]*test_set$x
sqrt(mean((y_hat - test_set$y)^2))
})
structure(c(mean(rmse),sd(rmse)))
})

谢谢你的帮助!!

我认为你应该使用类似的东西:

library(caret)
library(dplyr)
n=c(100,500,1000,5000,10000)
f1= purrr::map(n,function(x){
rmse=replicate(100,{
dat <- ff(x)
y <- 1:nrow(dat)
test_index <- createDataPartition(y, times = 1, p = 0.5, list = FALSE)
train_set <- dat %>% slice(-test_index)
test_set <- dat %>% slice(test_index)
fit <- lm(y ~ x, data = train_set)
y_hat <- fit$coef[1] + fit$coef[2]*test_set$x
sqrt(mean((y_hat - test_set$y)^2))
})
c(mean(rmse),sd(rmse))
})

最新更新