2016-04-18 3 views
-1

У меня есть простой вопрос: я создал функцию под названием se.bootstrap, который принимает элементы из двух векторов:Как хранить данные в матрице

bs <- c(10, 25, 200, 500, 5000) 
sample.size <- c(5, 10, 200, 2000) 

Я пытаюсь пройти все возможные комбинации элементов из этих двух векторов к этой функции и сохранять результаты в виде матрицы, такие как:

 10     25  200   500   5000 
5  sd.boostrap(5, 10) 
10 
200 
2000              sd.boostrap(2000, 5000) 

Может кто-нибудь помочь с этим? Большое спасибо

+0

Что вы ожидаете получить? –

+0

'sd.bootstrap' также будет полезен –

ответ

0
se.bootstrap <- function(a,b) (a*b) # use whatever function on 2 variables 
bs <- c(10, 25, 200, 500, 5000) # your vectors 
sample.size <- c(5, 10, 200, 2000) # your vectors 
res <- matrix(se.bootstrap(expand.grid(bs,sample.size)$Var1,expand.grid(bs,sample.size)$Var2),nrow = length(bs),ncol = length(sample.size)) 

expand.grid делает то, что вы хотите, и возвращает var1 и var2, который идет к функции, определенной. матрица() делает вектор матрица, имеющая размеры векторов (вы можете переключаться Cols => строки)

res 
     [,1] [,2] [,3] [,4] 
[1,] 50 100 2e+03 2e+04 
[2,] 125 250 5e+03 5e+04 
[3,] 1000 2000 4e+04 4e+05 
[4,] 2500 5000 1e+05 1e+06 
[5,] 25000 50000 1e+06 1e+07 
0

Предполагая se.bootstrap возвращает скаляр, вы можете:

# function that returns a scalar 
sd.fake <- function(bs, ss) bs*ss 

# we prepare the matrix 
res <- matrix(nr=length(sample.size), nc=length(bs), dimnames=list(sample.size, bs)) 

# we loop and fill the matrix 
for (i in seq_along(sample.size)) 
    for (j in seq_along(bs)) 
    res[i, j] <- sd.fake(sample.size[i], bs[j]) 

> res 
10 25 200  500 5000 
5  50 125 1e+03 2500 2.5e+04 
10  100 250 2e+03 5000 5.0e+04 
200 2000 5000 4e+04 100000 1.0e+06 
2000 20000 50000 4e+05 1000000 1.0e+07 

Это что ты хочешь? expand.grid может помочь.

+1

@ Zahiro Mor вариант векторизован и, вероятно, лучший вариант –

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