Я пытаюсь создать пользовательскую функцию, которая включает функцию 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 ().