2013-09-02 1 views
0

Элементарный вопрос: Я прошу прощения за это. В R Я хотел бы создать структуру данных x с 2 индексами, скажем i и j, s.t. (Псевдокод)В R матрица векторов и поиск оптимального

for (i in 1:10){ 
    for (j in 1:20){ 
    x[i,j] <- c(i+j,j-i^2) 
    } 
} 

т.е. каждый элемент x является вектором с 2-х компонентов. Более того, хотел бы найти в x , чтобы найти пару i,j дает максимальное значение j-i^2; это должно быть выполнено в вышеупомянутом двойном for. Не могли бы вы дать мне несколько советов? Я благодарю всех вас.

ответ

1

Вы можете выполнить это с помощью outer. Из вашего вопроса неясно, рассматриваете ли вы i и j как абсолютные значения или как некоторый вектор индекса. Я предполагаю, что они являются индексами вектора, x:

set.seed(1) 
x <- runif(20) 
matm <- outer(x[1:20] , (x[1:10])^2 , `-`) 
matp <- outer(x[1:10] , x[1:20] , `+`) 

head(cbind(i_plus_j = c(matm) , j_minus_i_sq = c(matp))) 
#  i_plus_j j_minus_i_sq 
#[1,] 0.1950138 0.5310173 
#[2,] 0.3016290 0.6376326 
#[3,] 0.5023585 0.8383620 
#[4,] 0.8377129 1.1737165 
#[5,] 0.1311871 0.4671906 
#[6,] 0.8278948 1.1638983 


which(matm == max(matm) , arr.ind = TRUE ) 
#  row col 
#[1,] 18 10 
+0

спасибо за ваш вопрос; однако 'i' и' j' - это индексы, которые идентифицируют элементы 'x', и мне нужны оба из них. Например, я бы избегал рассматривать «х» в качестве списка, потому что я не хочу рассматривать один индекс. Можно ли определить список с двойным индексом, что-то вроде 'x [[i, j]]'? – Avitus

+0

измените его на 'external (x [1:20], (x [1:10])^2," - ")' и 'outer (x [1:10], x [1:20]", + ")'. –

+0

Я вижу ... отлично, спасибо! – Avitus