2016-05-20 5 views
0

У меня есть df с 10 000 столбцов (частоты SNP). Мне нужно провести симуляцию (факторный анализ) с не повторяющимися векторами. Для этого мне нужно провести факторный анализ подмножеств столбцов, разделенных на группы по 10. Например, cols 1:10, 11:20; 21:30. Поскольку вручную указать это, потребуется возраст, мне нужен простой скрипт, который это делает. Я написал это, но он не работает. Я не могу понять, как сказать R, когда начинать и останавливать каждую итерацию.Факторный анализ с использованием R над последовательными группами столбцов в df

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

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

ответ

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])) 

сохранить результат в виде списка.

Хотя это может быть ответ на ваш вопрос, позвольте мне, тем не менее, добавить то, что я буду делать, поскольку я думаю, что это может помочь вам больше в долгосрочной перспективе: вместо того, чтобы перебирать столбцы, я бы dataframe в длинный формат, создайте индекс, указывающий группы из 10 в качестве новой переменной, а затем используйте эту переменную в качестве переменной группировки в сочетании с операциями dplyrgroup_by() для группового анализа.

+0

Спасибо! Кажется, это трюк! –

+0

Рад, что я мог помочь. Я добавил небольшой комментарий, о котором стоит подумать, если вам понадобится больше операций над этими группами. – coffeinjunky