0

我有一个包含 10,000 列(SNP 频率)的 df。我需要使用非重复向量进行模拟(因子分析)。为了做到这一点,我需要对列子集进行因子分析,分成 10 个组。例如 cols 1:10, 11:20; 21:30。由于手动指定这需要很长时间,我需要一个简单的脚本来完成它。我写了这个,但它似乎不起作用。我不知道如何告诉 R 何时开始和停止每次迭代。

ind=seq(1,(ncol(df)-10),by=10)

for (i in ind) { start=i;end=i+9; rez = factanal(df,factors=1, start:end)  }
4

1 回答 1

1

只是一个小指针:

 groups <- seq(from=1, to=10000, by=10)

这对于将列分成 10 个组可能很有用。然后,对于组的每个元素,您可以添加类似0:9. 看

> 1 + 0:9
 [1]  1  2  3  4  5  6  7  8  9 10

这可用于对您的数据框进行子集化。

例如,

for(i in groups){
  your_function( dat[, i + 0:9] )
}

将使用相应的数据执行您的函数。确保适当地存储函数的输出。lapply将其包装到调用中可能很有用,例如

 lapply(groups, function(x) your_function(dat[, x + 0:9]))

将输出保存在列表中。

虽然这可能是您问题的答案,但让我补充一下我会做的事情,因为我认为从长远来看这可能会对您有更多帮助:我不会循环遍历列,而是将melt数据框转换为长格式,创建一个指示组的索引10 作为新变量,然后将该变量用作分组变量,并结合dplyrgroup_by()操作进行分组分析。

于 2016-05-20T09:19:13.340 回答