Поиск ячеек матрицы R векторизованным способом

Я хотел бы искать ячейки матрицы, используя строки и столбцы из фрейма данных. Предпочтительно, я хотел бы сделать это векторизованным способом для лучшей производительности. Однако наиболее очевидный синтаксис приводит к поиску всех возможных комбинаций строк и столбцов, а не только комбинаций, происходящих из одной строки фрейма данных:

Вот небольшой пример:

> m1 <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9), 3, 3)
> 
> m1
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
> 
> p1 <- data.frame(row = c(2, 3, 1), column = c(3, 1, 2))
> 
> p1
  row column
1   2      3
2   3      1
3   1      2
> 
> # vectorized indexing that does not work as intended
> m1[p1$row, p1$column]
     [,1] [,2] [,3]
[1,]    8    2    5
[2,]    9    3    6
[3,]    7    1    4
> 
> # this works as intended, but is possible slow due to R-language looping
> sapply(1 : nrow(p1), function (i) { m1[p1[i, "row"], p1[i, "column"]] })
[1] 8 3 4

Вызов sapply вычисляет ожидаемый результат (только m1[2, 3], m1[3, 1] и m1[1, 2]), но ожидается, что он будет медленным для больших кадров данных, потому что он зацикливается на языке R.

Любые мысли о лучшем (в идеале векторизованном) способе?

Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
0
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для вашей предполагаемой цели вам нужно использовать матрицу для подмножества матрицы, используя определенные комбинации строк и столбцов. Итак, вы можете попробовать:

m1[as.matrix(p1)]
# [1] 8 3 4

Или, если у вас есть два вектора:

m1[cbind(row_idx, col_idx)]

Другие вопросы по теме