我在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
问题在于这种方式极其缓慢且消耗资源。 有人认为这样做更有效吗? 非常感谢
答案 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”。