【问题标题】:r - How to make this loop faster? [closed]r - 如何使这个循环更快? [关闭]
【发布时间】:2016-08-22 00:45:10
【问题描述】:

我正在阅读名为cleanequityreturns.csv.csv 文件,它看起来像这样:

它从 r1r299,有 4,166 行。然后,以下代码为每一列创建一个新文件,使用approx_entropy 函数计算近似熵,并打印该值。我知道为每一列创建一个新文件非常繁琐,但我找不到另一个来做。

    equityreturn <- read.csv("cleanequityreturns.csv", header=T)
for(i in 1:299) {
    file2 = paste(i, "equityret.csv", sep="")
    file5 = paste("r", i, sep="")
    file1 = subset(equityreturn, select=file5)
    write.table(file1, file2, sep="\t", row.names=FALSE, col.names=FALSE)
    file3 = paste("equity", i, sep="")
    file3 = matrix(scan(file = file2), nrow=4166, byrow=TRUE)
    print(approx_entropy(file3, edim = 4, r=0.441*sd(file3), elag = 1))
}

我的问题如下:代码执行这些任务需要很长时间。我尝试将它运行 10 列,大约需要 20 分钟,对于所有 299 列来说,这大约需要 10 小时。另外,这段代码打印了每个近似熵值,所以我仍然需要将它们复制并粘贴到 Excel 中才能使用它们。

如何使这段代码运行得更快,并将输出写入.csv 文件?

【问题讨论】:

    标签: r loops csv


    【解决方案1】:

    只需使用lapply() 作为通过它运行数据帧迭代地处理列:

    equityreturn <- read.csv("cleanequityreturns.csv", header=T)
    
    entropy_values <- lapply(equityreturn, function(col) {
            approx_entropy(col, edim = 4, r = 0.441*sd(col), elag = 1)
    })
    

    【讨论】:

      猜你喜欢
      • 2018-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多