2016-08-22 70 views
-3

我读了.csv文件名为cleanequityreturns.csv它看起来像这样:r - 如何使这个循环更快?

enter image description here

它从r1r299,有4166行。以下代码然后为每列创建一个新文件,使用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文件?

回答

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