2013-09-20 2 views
0

У меня есть два dataframes следующим образом:самонастройка два набора данных в R

seed(1) 
X <- data.frame(matrix(rnorm(2000), nrow=10)) 

где строки представляют собой гены и столбцы являются генотипами.

Для каждого раунда самозагрузки (n=1000), генотипы должны быть выбраны случайным образом без замены из этого набора данных (X) и образуют две группы наборов данных (X' должны иметь 5 генотипов и Y' должны иметь 5 генотипов). В принципе, в конце концов, у меня будет тысяча таких наборов данных X' и Y', которые будут содержать 5 случайных генотипов каждый из полного набора данных выражения.

Я пробовал использовать replicate и apply, но не работал.

B <- 1000 
replicate(B, apply(X, 2, sample, replace = FALSE)) 

ответ

1

Я думаю, что это могло бы иметь больше смысла для вас, чтобы сначала выбрать номера столбцов, 10 из 200 без замены (пять для каждого X «и Y»):

colnums_boot <- replicate(1000,sample.int(200,10)) 

оттуда, как оценки каждой итерации, я от 1 до 1000, вы можете захватить

Xprime <- X[,colnums_boot[1:5,i]] 
Yprime <- X[,colnums_boot[6:10,i]] 

Это спасает вас от 3-х мерную array (обобщение matrix в R).

Кроме того, если скорость является проблемой, я думаю, что гораздо быстрее оставить X в качестве матрицы вместо кадра данных. Может быть, кто-то может прокомментировать это.

EDIT: Вот способ, чтобы захватить их все-фронт (в паре трехмерных массивов):

Z <- as.matrix(X) 
Xprimes <- array(,dim=c(10,5,1000)) 
Xprimes[] <- Z[,colnums_boot[1:5,]] 

Yprimes <- array(,dim=c(10,5,1000)) 
Yprimes[] <- Z[,colnums_boot[6:10,]] 
+1

@ user2294316 я добавил что-то мой ответ, показывающий, как хранить наборы данных , 'Xprimes [,, i]' и 'Yprimes [,, i]' содержат 'i'th набор данных сейчас. – Frank

Смежные вопросы