如何在矩阵中存储数据

时间:2016-04-18 05:47:42

标签: r loops matrix

我有一个简单的问题:我创建了一个名为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)

有人可以提供帮助吗? 非常感谢你

2 个答案:

答案 0 :(得分: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,它们将转到定义的函数。 matrix()使向量成为具有向量维度的矩阵(可以切换cols =&gt;行)

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

答案 1 :(得分: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也可以提供帮助。