使用 R 对 df 中的连续列组进行因子分析
Factor analysis using R over sequential groups of columns in df
我有一个包含 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) }
只是一个小指针:
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
将dataframe转化为long format,创建一个索引,表示以10为一组的新变量,然后将该变量作为分组变量,结合dplyr
的group_by()
操作进行分组分析。
我有一个包含 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) }
只是一个小指针:
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
将dataframe转化为long format,创建一个索引,表示以10为一组的新变量,然后将该变量作为分组变量,结合dplyr
的group_by()
操作进行分组分析。