使用粘贴功能在用户定义的函数中进行数据索引

时间:2020-04-20 13:59:05

标签: r

我试图在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,需要执行哪些操作来分离出代码元素,以便可以将代码元素合并到该功能的输入。

0 个答案:

没有答案