Хотя я искал, я не смог найти однозначного ответа на свой вопрос. Предположим, у меня есть массив:
vector1 <- c(5,9,3)
vector2 <- c(10,11,12,13,14,15)
result <- array(c(vector1,vector2),dim = c(3,3,2))
Теперь я хочу разбить этот массив на подмножество таким образом, чтобы получить элементы из определенных строк и столбцов. Например:
result[1,3,1:2]
result[3,1,1:2]
так как у меня много индексов, они расценены в
rowind=c(1,3)
colind=c(3,1)
Для подмножества я попытался использовать таким образом векторы строк и столбцов.
dim(result[rowind,colind,1:2])
[1] 2 2 2
Это не то, что я хочу. Я хочу, чтобы на выходе было одно значение для каждой пары индексов. Фактически, я хочу, чтобы моя извлеченная матрица имела размер 2x2 (а не 2x2x2). Чтобы вы знали, я пробовал "цикл". Но проблема в том, что у меня много массивов, и это займет очень много времени.
result_c=matrix(NA,nrow=2,ncol=2)
for (i in 1:2){
result_c[i,]=result[rowind[i],colind[i],]
}
Спасибо за вашу помощь.



Если я вас правильно понял, мы можем использовать Map
Map(function(i, j) result[i, j, 1:2], rowind, colind)
#[[1]]
#[1] 13 13
#
#[[2]]
#[1] 3 3
Или упрощенный как matrix с использованием mapply
mapply(function(i, j) result[i, j, 1:2], rowind, colind)
# [,1] [,2]
#[1,] 13 3
#[2,] 13 3
Map - это оболочка для mapply, которая не упрощает результаты, тем самым создавая list (а не matrix).
Мы могли бы передать matrix индексов для подмножества данных
result[cbind(rep(rowind, each = 2), rep(colind, each = 2), 1:2)]
#[1] 13 13 3 3
Разве это не дубликат stackoverflow.com/questions/41384466/…