我试图在R中创建一个用户定义的函数,用于一段测试Naive Bayes分类器准确性的代码。原始代码使用循环来创建Iris数据集的十个测试数据集,并且工作正常。但是,我想创建一个用户定义的函数来替换脚本中的虹膜特定代码,以便可以更广泛地使用它。
原始代码是:
library(datasets)
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))
}
mean(accuracy)
我最终想要得到的类似于:
naive_bayes_accuracy <- function(){
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
nb <- naive_bayes(Species ~., data = iris[training_index,])
Pred_class <- predict(nb, iris[test_index,], type = "class")
(cont_tab <- table(Pred_class, iris$Species[test_index]))
(accuracy[i] <- sum(diag(cont_tab))/sum(cont_tab))
}
mean(accuracy)
}
我遇到的问题是将代码的“ iris”和“ Species”部分分开,这些部分将输入到用户定义的函数中。导致问题的脚本的特定部分是:
iris[training_index,]
iris[test_index,]
iris$Species[test_index]
我希望粘贴功能的简单应用能够完成这项工作,但事实并非如此。 :(
我必须提供一个示例的初始逻辑是尝试:
paste0(iris, [training_index,])
索引数据的方括号被证明是粘贴功能的问题,在这一点上,我拥有NFI,需要执行哪些操作来分离出代码元素,以便可以将代码元素合并到该功能的输入。