2017-05-03 138 views
-1

我有一套100个模型,如wynik1,... wynik100 confusionMatrixes。循环生成字符串和变量

我想拥有所有这些模型的精度矢量。

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

问题在哪里?

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

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 
+2

请提供一个可重现的例子,并精确定义输入和期望的输出。 –

+3

'name'是一个字符值,不是混淆矩阵。也许你的意思是'name < - get(paste0(“wynik”,i))'? – Benjamin

+0

@Benjamin - 是的,确切的!谢谢。你可以回答你是否想要:) – AgnieszkaTomczyk

回答

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])