Итак, я знаю, что если у вас есть:

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[]

Благодарность!

2
Omar Wagih 18 Апр 2013 в 23:45
Что вы ожидаете получить от m[z]? Где непоследовательность? Помните, что в R matrix - это просто vector с размерами ...
 – 
Justin
18 Апр 2013 в 23:53
Ну жду матрицу. Я знаю, что он вернет вектор. но вместо того, чтобы создавать новую матрицу из вектора, например: matrix(vector, nrow, ncol), я нашел этот полезный оператор. Я просто не смог найти по нему никакой документации
 – 
Omar Wagih
19 Апр 2013 в 00:00
4
Документацию для "[" можно найти с помощью ?Extract или ?"[". Его следует изучить внимательно , если вы хотите избежать других распространенных ошибок, я бы предложил по крайней мере 5 полных чтений.
 – 
IRTFM
19 Апр 2013 в 00:02

1 ответ

Лучший ответ

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

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

2
IRTFM 19 Апр 2013 в 00:37