【问题标题】:How can I let my program run 100 times and save my results in a dataframe?如何让我的程序运行 100 次并将结果保存在数据框中?
【发布时间】:2023-03-29 18:40:01
【问题描述】:

我有一个程序,可以将第一步中的数据分为训练集和测试集。之后,构建了一个决策树,我收到了一个混淆矩阵。

我现在想做的是,重复这些步骤(划分训练和测试、决策树和混淆矩阵)100 次,所以我总是得到不同的训练和测试数据集。

我想要的是得到一个具有混淆矩阵的准确性、敏感性和特异性的结果数据框。

准确度、灵敏度和特异性保存在向量中:

overall.accuracy <- format(overall['Accuracy'] * 100, nsmall =2, digits = 2)
overall.sensitivity <- format(cm$byClass['Sensitivity']* 100, nsmall =2, digits = 2)
overall.specificity <- format(cm$byClass['Specificity']* 100, nsmall =2, digits = 2)

我想要的输出是这样的:

> result_df

    accuracy      sensitivity    specifity 
1    30.22%          95.12%       30.23%
2    34.10%          80.12%       27.76%
3    31.56%          85.78%       28.98%
.       
.
.
100  32.33%          87.34%       29.45%

我可以使用replicate(),但我不熟悉这个功能,我不知道如何将每个循环的准确性、灵敏度和特异性保存在数据框中。

【问题讨论】:

    标签: r repeat


    【解决方案1】:

    最简单的方法是使用 for 循环,即。

    result_df<-matrix(ncol=3,nrow=100)
    colnames(result_df)<-c("Acc","Sens","Spec")
    
    for (i in 1:100)
    {
    YOUR CODE HERE
    result_df[i,1] <- format(overall['Accuracy'] * 100, nsmall =2, digits = 2)
    result_df[i,2] <- format(cm$byClass['Sensitivity']* 100, nsmall =2, digits = 2)
    result_df[i,3] <- format(cm$byClass['Specificity']* 100, nsmall =2, digits = 2)
    }
    

    【讨论】:

    • hi beavis!谢谢你的解决方案。我只是尝试运行它,它给了我这个错误消息:Error in [(*tmp*, 1, i, value = format(overall["Accuracy"] * 100, : subscript out of bounds 这是什么意思?
    • 嗨@hpmurg。对不起,我没有正确检查我的代码。我在 result_df 部分中错误地放置了行和列。现在应该是正确的 span>
    • 它有效,但结果_df在每一行和coulmn中有(行18除外)na ...:/ span>
    • 那可能是您的代码有问题。如果你运行'i=1',测试它,看看会发生什么。它会产生任何警告吗? span>
    • 我的代码所做的只是获取您创建的值并将其分配给第 1、第 2 和第 3 列中的第 i 个元素,因此它不会产生任何不存在的 NA 。要对此进行测试,您可以尝试 result_df&lt;-matrix(rep("-",300),ncol=3,nrow=100) 开始,然后当循环完成时,如果单元格具有 NA,则它是您的代码生成它们,并且任何 -s 表示它没有生成任何东西
    猜你喜欢
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    相关资源
    最近更新 更多