2013-04-18 5 views
2

Так что я знаю, что если у вас есть:[] и оператор матриц R

m = matrix(1:9, 3,3) 
z = as.matrix(expand.grid(1:3, 1:3)) 

и вы

m[z] 
# you get back 1 2 3 4 5 6 7 8 9 

Но если вы

m[] = m[z] 
# You get back a matrix.. 

Я немного путают относительно того, что делает этот оператор []? почему не что-то вроде m[][z] или m[z][] вернуть матрицу? и как бы я получил его, чтобы вернуть матрицу без, присвоив ее переменной m[]

Спасибо!

+0

Что вы ожидаете получить от 'm [z]'? Где непоследовательность? Помните, что в R матрица - это просто «вектор» с размерами ... – Justin

+0

Ну, я ожидаю матрицу. Я знаю, что он вернет вектор. но вместо создания новой матрицы из вектора, например: 'matrix (vector, nrow, ncol)', я нашел этот полезный оператор. Я просто не мог найти документацию по нему – by0

+4

Документация для «[» может быть найдена либо с помощью?? Extract', либо '? '[" '. Его следует изучать _carefully_, если вы хотите избежать других распространенных ошибок, я бы предложил не менее 5 полных чтений. –

ответ

2

Ключ здесь в том, что когда аргумент «[]» (который действительно является функцией) представляет собой матрицу с двумя столбцами, как вы указали, результатом будет вектор, в котором первый столбец указывает строку и второй столбец определяет столбец в управляемой матрице. Это «особенность» (и очень удобная, я могу добавить) языка.

Аргументы могут содержать или не содержать все возможные комбинации строк и столбцов, поэтому результат не предсказуемо будет тем, что разумно было бы матрицей одинаковых размеров. Форма: m[] <- m[ z[1:4, ] ] даст результат, но также предупреждение. Вы должны посмотреть на результат, а затем попытаться понять, что происходит.