Отредактируйте ввод данных в naive_bayes (), чтобы он мог быть включен в пользовательскую функцию - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь создать пользовательскую функцию, которая включает функцию naive_bayes () из пакета naivebayes.

Часть кода, с которой у меня возникают проблемы:

NaiveBayesIris <- naive_bayes(Species ~., data = iris[training_index,])

В исходном коде используется набор данных Iris, но я пытаюсь отредактировать код в новой функции, чтобы данные можно поменять. Я надеялся, что это будет так же просто, как изменить код на:

NaiveBayesIris <- naive_bayes(Species ~., data = paste0(iris[, training_index,]))

Идея заключается в том, что «виды» и «радужная оболочка» могут быть заменены для вызова функций.

Весь фрагмент кода, который я превращаю в функцию, проверяет точность данных, выполняя их десять раз, и выглядит следующим образом:

library(datasets)    # contains iris data set
library(naivebayes)

accuracy <- rep(0,10)

no_obs <- dim(iris)[1] # No. of observations (150)

set.seed(0)

for(i in 1:10){
  test_index <- sample(no_obs, size = as.integer(no_obs*0.2), replace = FALSE) # 20% data records for test
  training_index <- -test_index # 80% data records for training
  NaiveBayesIris <- naive_bayes(Species ~., data = iris[training_index,])
  Pred_class <- predict(NaiveBayesIris, iris[test_index,], type = "class")
  (cont_tab <- table(Pred_class, iris$Species[test_index]))
  (accuracy[i] <- sum(diag(cont_tab))/sum(cont_tab))
}

accuracy

mean(accuracy)

Учитывая длина кода, я хочу упростить ситуацию, превратив его в обобщенную функцию c, имея возможность поменять код 'Iris' и 'Species', заданный c. Я думаю У меня большая часть разобралась с помощью функции paste0 (), но я не могу заставить функцию naive_bayes () читать данные, когда я разделяю их с помощью функции paste0 ().

...