循环生成字符串和变量

时间:2017-05-03 11:18:47

标签: r string

我有一套100个模型的混淆矩阵,如wynik1,... wynik100。

我希望拥有所有这些模型的准确度。

我写了一个循环,但它不起作用。

问题出在哪里?

任务是从字符串生成字符串和变量:

confusionMatrix(m2pred,cats$Sex)-> wynik1
...

accuracy <- NULL
b_accuracy <- NULL
for (i in 1:100){
  name <- paste0("wynik",i)
  ac<- name$overall[1]
  bac<- name$byClass[11]
  accuracy <- c(accuracy, ac)
  b_accuracy <- c(b_accuracy, bac)
}
accuracy

输出结果为:

Error in nazwa$overall : $ operator is invalid for atomic vectors
> accuracy
NULL

1 个答案:

答案 0 :(得分:1)

name是一个角色对象,而不是混淆矩阵。您应该使用get

confusionMatrix(m2pred,cats$Sex)-> wynik1
...
accuracy <- NULL
b_accuracy <- NULL
for (i in 1:100){
  name <- get(paste0("wynik",i))
  ac<- name$overall[1]
  bac<- name$byClass[11]
  accuracy <- c(accuracy, ac)
  b_accuracy <- c(b_accuracy, bac)
}
accuracy

但这里的for循环是一种令人费解的方式来获取您所追求的信息。此外,您正在增长(更改每次迭代的长度)accuracyb_accuracy,这是不推荐的。我可能会推荐以下内容,它将您的所有混淆矩阵放入一个列表中,然后使用*apply函数将您想要的部分提取到矢量中。

wynik_list <- 
  mget(x = paste0("wynik_", 1:100))

accuracy <- 
  sapply(wynik_list,
         function(x) x$overall[1])

b_accuracy <- 
  sapply(wynik_list,
         function(x) x$byClass[11])
相关问题