P R中的值排列

时间:2019-03-04 14:11:41

标签: r loops permutation

我在r中很新

我正在R中进行置换测试,以确定某些SNP的出现百分比是否是偶然的 我的数据设置了一个52K值的向量 我按原样通过Loop进行测试:

R1_H <- R1[,12] #extract the vector from a dataframe

niter=100000       #set the number of iterations
out <- rep(0,length(R1_H))

for (i in 1:niter){
out = out + (R1_H <= sample(R1_H)) #compare my ocurrence against a 
                                 #sample of the entire population
}

pvalue=out/niter #determine the pvalue
R1$pvalueF = pvalue #print the pvalue

问题在于这种方式极其缓慢且消耗资源。 有人认为这样做更有效吗? 非常感谢

1 个答案:

答案 0 :(得分:0)

我不确定您在做什么。但有几点。 R具有内置的replicate函数,该函数专门针对此类情况设计。您可以使用的一种选择是:

my_vector <- replicate(niter, 
                   expr = (R1_H <= sample(R1_H, replace = T)))

expr重复niter次。在这种情况下,它将进行替换采样,并返回一个矩阵,其中包含R1_H和10k列中的数据点数量。然后您可以执行以下操作:

mean(colMeans(my_vector))

要获取您要报告的“ pvalue”。