我有一个简单的问题:我创建了一个名为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)
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
也可以提供帮助。