【发布时间】:2011-12-07 20:32:13
【问题描述】:
我需要将 R 中的 Mann Kendall 趋势检验应用于大量(约 100 万)不同大小的时间序列。我已经创建了一个脚本,它从某个目录中的所有文件中获取时间序列(实际上是一个数字列表),然后将结果输出到一个 .txt 文件。
问题是我有大约 100 万个时间序列,因此创建 100 万个文件并不是很好。所以我认为将所有时间序列放在一个 .txt 文件中(例如,用“#”之类的符号分隔)可能更易于管理。所以我有一个这样的文件:
1
2
4
5
4
#
2
13
34
#
...
我想知道,是否可以在 R 中提取这样的系列(在两个“#”之间)然后应用分析?
编辑
按照@acesnap 提示,我正在使用此代码:
library(Kendall)
a=read.table("to_r.txt")
numData=1017135
for (i in 1:numData){
s1=subset(a,a$V1==i)
m=MannKendall(s1$V2)
cat(m[[1]]," ",m[[2]], " ", m[[3]]," ",m[[4]]," ", m[[5]], "\n" , file="monotonic_trend_checking.txt",append=TRUE)
}
这种方法有效,但问题是计算需要很长时间。您能建议一种更快的方法吗?
【问题讨论】:
-
如果您有新问题,最好的办法是重新发布一个新问题。特别是因为已经有一个公认的答案。
-
@PaulHiemstra 我会听从你的提示
-
这是否可以加速取决于瓶颈是什么。如果是循环,您可以查看 data.table 包中的 data.table 。如果是 MannKendall 测试,那么加快速度可能会有点困难。
-
您可以使用以下方法对循环的不同部分进行计时: # 开始计时! ptm