Я получаю ошибку в dat $ y: оператор $ недействителен для векторов atomi c при попытке вычислить возможные результаты с помощью функции map () - PullRequest
0 голосов
/ 16 июня 2020

В настоящее время я прохожу онлайн-курс «Наука о данных: машинное обучение», и нас просят подобрать lm 100 раз и получить значения среднего (rmse) и sd (rmse) для наборов данных разного размера n = c (100,500,1000,5000,10000). нас просят создать функцию, которая принимает размер n и строит набор данных, затем запускает l oop, созданный для подбора 100 моделей, затем устанавливает начальное число и использует функцию map () или sapply () для применения нашего нового функция для n разных размеров.

Код, который я сделал, показывает мне ошибку «Ошибка в dat $ y: $ operator недействителен для atomi c vectors» при запуске f1 Это мой код:

   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)))
    })

Спасибо за помощь !!

1 Ответ

0 голосов
/ 16 июня 2020

Я думаю, вам следует использовать что-то вроде:

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))
    })
...