Я в основном пытаюсь указать один индекс (или два) n-мерного массива за раз (оставляя все остальные индексы пустыми), где и позиция указанного индекса / индексов, и размерность массива параметры в моем коде (т.е. мне нужно, чтобы это работало для любого n-мерного массива, где n> 1).
У меня есть массив (H) размеров 2x2x ... x2 (n измерений, каждый с диапазоном индекса от 1 до 2). n не указано, просто ограничено n> 1.
У меня есть другой массив (J) измерений nx2x2x ... x2 (n + 1 всего измерения, где первое измерение имеет диапазон индекса от 1 до n, а остальные имеют диапазоны индекса от 1 до 2).
Я пытаюсь использовать цикл for для определения следующих подмножеств массива (при условии, что здесь n = 4):
J[1,1,,,]<-H[1,,,]
J[1,2,,,]<-H[1,,,]
J[2,,1,,]<-H[,1,,]
J[2,,2,,]<-H[,1,,]
J[3,,,1,]<-H[,,1,]
J[3,,,2,]<-H[,,1,]
J[4,,,,1]<-H[,,,1]
J[4,,,,2]<-H[,,,1]
Я делал это, просматривая циклы от i = 1 до i = n и пытаясь определить соответствующие подмножества J для каждого значения i. Однако, чтобы это работало, мне нужен способ указать произвольное количество «пустых» индексов.
Для фиксированных n и фиксированных i это просто - вы можете просто оставить индексы пустыми, как показано выше, или заменить ИСТИНА:
J[1,1,TRUE,TRUE,TRUE]
#is equivalent to
J[1,1,,,]
Чтобы сделать это для массива размерности n Сначала я попытался создать индексную матрицу из одной строки, состоящую из чисел и значений TRUE, но, конечно, R приводит все значения к числовым. Фрейм данных списка или одной строки допускает числовые и логические записи, но не может использоваться для индексации массива. Это проблема, с которой я сталкиваюсь с примером кода, включенным ниже.
J<-array(NA,dim=c(n,rep(2,n)))
for(i in 1:n){
index_j<-matrix(rep(T,n+1),nrow=1)
index_j<-data.frame(index_j)
index_j[c(1,i+1)]<-c(i,1)
index_h<-index_j[2:(n+1)]
J[index_j]<-H[index_h]
index_j[i+1]<-2
J[index_j]<-H[index_h]
}