我的问题有一个可行的解决方案,但我无法使用它,因为它太慢了(我的计算预测整个模拟需要 2-3 年!)。因此,我正在寻找更好(更快)的解决方案。这是(本质上)我正在使用的代码:
N=4
x <-NULL
for (i in 1:N) { #first loop
v <-sample(0:1, 1000000, 1/2) #generate data
v <-as.data.frame(v) #convert to dataframe
v$t <-rep(1:2, each=250) #group
v$p <-rep(1:2000, each=500) #p.number
# second loop
for (j in 1:2000) { #second loop
#count rle for group 1 for each pnumber
x <- rbind(x, table(rle(v$v[v$t==1&v$p==j])))
#count rle for group 2 for each pnumber
x <- rbind(x, table(rle(v$v[v$t==2&v$p==j])))
} #end second loop
} #end first loop
#total rle counts for both group 1 & 2
y <-aggregate(x, list(as.numeric(rownames(x))), sum)
简而言之:代码生成抛硬币模拟 ( v
)。生成一个组因子(1 和 2)。生成一个 p.number 因子 (1:2000)。记录第 1 组和第 2 组的每个 p.number (1:2000) 的运行长度(每个 p.number 在两个组中都有运行)。在N
循环(第一个循环)之后,总运行长度以表格(聚合)的形式呈现(即,每个组的运行长度,每个 p.number,超过N
循环的总数)。
我需要第一个循环,因为我正在使用的数据来自单个文件(所以我正在加载文件,计算各种统计数据等,然后加载下一个文件并执行相同的操作)。我对第二个循环的依恋程度要低得多,但不知道如何用更快的东西替换它。
可以对第二个循环做些什么来使它(希望是很多)更快?