2014-11-04 4 views
1

Я хотел бы выбрать 5 элементов, не более 25, как можно быстрее. Это занимает много времени работать на больших векторах:Выбор матрицы элементов в R

a = c(1,2,5,2,3) 
b = c(2,4,1,4,5) 
d = matrix(1:25,nrow=5,ncol=5) 

result = array(NA,dim=length(a)) 

for (i in 1:length(a)) { result[i] = d[a[i],b[i]] } 

ИЛИ (более медленный)

result<-sapply(1:length(a), function(x) d[a[x],b[x]]) 
+0

Вы можете уточнить свое первое предложение * выбрать 5 элементов, не более 25 *. Я не понимаю, что это значит –

ответ

2

Просто используйте матрицу индексацию:

d[cbind(a, b)] 
# [1] 6 17 5 17 23 

Для получения более подробной информации см ?Extract, где вы будут найдены следующие строки:

A thi rd форма индексации осуществляется с помощью числовой матрицы с одним столбцом для каждого измерения: каждая строка индексной матрицы выбирает один элемент массива, а результат - вектор.

Есть также несколько примеров в разделе «Примеры» на той же странице справки.