Вы рассматриваете свой список матриц как некий трехмерный объект, но это не так.
Ваш list$matrices
сам по себе также является списком, что означает, что вы также можете индексировать его как список., не имеет значения, является ли это списком матриц, чисел, объектов заговора или чего-либо еще.
Данные, которые вы предоставили в качестве примера, могут быть просто проиндексированы на одном уровне, поэтому list$matrices[c(2,4,6)]
отлично работает,И я не получаю ваш вопрос о сохранении индексов в числовом векторе, что вас останавливает в этом коде?
indices <- c(2,4,6)
mysubset <- list(list$matrices[indices], list$treatment[indices])
РЕДАКТИРОВАТЬ, добавляя новую информацию для отредактированного вопроса:
Я вижу, у вас сейчас есть трехмерный массив.Что довольно странно, поскольку нет четкого соглашения о том, что можно рассматривать как «компоненты».Я имею в виду, что из вашего вопроса я понимаю, что list$array[,,n]
относится к n-му человеку, но с точки зрения чистого кода нет причины, по которой что-то вроде list$array[n,,]
не могло бы относиться к этому.
Может бытьВы получили идею из других языков, но это не совсем R-иш, ваш предыдущий пример со списком матриц стал для меня более понятным.И я думаю, что наиболее логичным был бы файл data.frame с матрицей столбцов и обработкой (который концептуально близок к списку с вектором и списком матриц, но для других он более понятен)
Но в любом случае, каков ваш желаемый результат?
Если это просто подмножество: с этой структурой, поскольку нет никаких ограничений на то, что могло бы быть контентом, вам просто нужно сказать R именно то, что вы хотите.Не существует ни одного оператора, который бы одновременно занимал подмножество вектора и 3-й индекс массива.Вам нужно будет сказать R, что вы хотите, чтобы третий индекс использовал для поднабора, и что вы хотите использовать тот же индекс для поднабора вектора.Который в основном просто код, который у вас уже есть:
idx <- c(2,4,6)
output <- list(list$array[,,idx], list$treatment[idx])