2012-04-21 2 views
8

Я хотел бы пробовать вектор x длины 7 с заменой и выборкой этого вектора 10 раз. Я пробовал что-то вроде следующего, но не могу получить результат 7x10, который я ищу. Это создает вектор 1x7, но я не могу понять, чтобы получить другие 9 векторовR: Образец вектора с заменой несколько раз

x <- runif(7, 0, 1) 
for(i in 1:10){ 
    samp <- sample(x, size = length(x), replace = T) 
} 

ответ

20

Это очень удобный способ сделать это:

replicate(10,sample(x,length(x),replace = TRUE)) 
4

Поскольку вы, кажется, хотите попробовать с замена, вы можете просто получить 7 * 10 образцов одновременно (что более эффективно для больших размеров):

x <- runif(7) 
n <- 10 
xn <- length(x) 
matrix(x[sample.int(xn, xn*n, replace=TRUE)], nrow=xn) 

# Or slightly shorter: 
matrix(sample(x, length(x)*n, replace=TRUE), ncol=n) 

Вторая версия использует sample непосредственно, но есть некоторые вопросы, с этим: если x является числовой длиной 1, происходят плохие вещи. sample.int безопаснее.

x <- c(pi, -pi) 
sample(x, 5, replace=T) # OK 
x <- pi 
sample(x, 5, replace=T) # OOPS, interpreted as 1:3 instead of pi... 
2

Похоже, у вас есть подходящий ответ, но вот подход, похожий на вашу первую попытку. Разница в том, что мы определяем samp с соответствующими размерами, а затем итеративно индексируем этот объект и заполняем его по одной строке за раз:

samp <- matrix(NA, ncol = 7, nrow = 10) 
for(i in 1:10){ 
    samp[i,] <- sample(x, size = length(x), replace = T) 
} 
Смежные вопросы