我有一个包含计数信息的200x200矩阵。我想在我的矩阵中随机抽取5行x 5列子集,并取这个子集中的平均值。我想在整个矩阵中随机执行8次(所以可能使用for循环?)然后取这些8的平均值。我还需要使用限制,以便随机数生成器不会在最边缘采样我的矩阵
我是R的新手并且编程一般,所以推动正确的方向会非常有帮助。
答案 0 :(得分:1)
这是一种方法:
# an example 10x10 matrix
mat <- matrix(1:100, 10)
nc <- ncol(mat) # number of columns
nr <- nrow(mat) # number of rows
size <- 5 # size of the subset matrix
nmat <- 8 # number of submatrices
# sample indices of submatrices
set.seed(1)
idxc <- sample(seq(2, nc - size), size = nmat, replace = TRUE)
idxr <- sample(seq(2, nr - size), size = nmat, replace = TRUE)
# create a list of 8 submatrices
res <- mapply(function(x, y) mat[seq(x, x + size - 1), seq(y, y + size - 1)],
idxr, idxc, SIMPLIFY = FALSE)
# calculate the average of the averages
mean(unlist(res))
# [1] 53.875
答案 1 :(得分:0)
另一种选择,假设你总是拉出一个正方形。 (即,行/列彼此相邻)。
y <- matrix(round(rep(runif(200),200)*100),ncol=200,nrow=200)
sq <- seq(1,196,1)
blocks <- sample(sq,8) # no replacements of squares
mean(
sapply(blocks,
function(x) mean(y[x:(4+x),x:(4+x)])
)
)