В чем разница между матрицей() и as.matrix() в r?
Я запустил следующее в R и получил тот же вывод для matrix()
и as.matrix()
, и теперь я не уверен, в чем разница между ними:
> a=c(1,2,3,4)
> a
[1] 1 2 3 4
> matrix(a)
[,1]
[1,] 1
[2,] 2
[3,] 3
[4,] 4
> as.matrix(a)
[,1]
[1,] 1
[2,] 2
[3,] 3
[4,] 4
Ответы
Ответ 1
matrix
принимает data
и дополнительные аргументы nrow
и ncol
.
?matrix
If one of ‘nrow’ or ‘ncol’ is not given, an attempt is made to
infer it from the length of ‘data’ and the other parameter. If
neither is given, a one-column matrix is returned.
as.matrix
- метод с различным поведением для разных типов, но главным образом для возврата матрицы n * m из ввода n * m.
?as.matrix
‘as.matrix’ is a generic function. The method for data frames
will return a character matrix if there is only atomic columns and
any non-(numeric/logical/complex) column, applying ‘as.vector’ to
factors and ‘format’ to other non-character columns. Otherwise,
the usual coercion hierarchy (logical < integer < double <
complex) will be used, e.g., all-logical data frames will be
coerced to a logical matrix, mixed logical-integer will give a
integer matrix, etc.
Разница между ними происходит в основном из формы ввода, matrix
не заботится о форме, as.matrix
делает и будет поддерживать ее (хотя детали зависят от фактических методов ввода и в ваш случай безразмерный вектор соответствует одной колоночной матрице.) Не имеет значения, является ли вход сырым, логическим, целочисленным, числовым, символьным или сложным и т.д.
Ответ 2
matrix
создает матрицу из своего первого аргумента с заданным количеством строк и столбцов. Если поставляемый объект недостаточно велик для нужного выхода, matrix
будет перерабатывать его элементы: например, matrix(1:2), nrow=3, ncol=4)
. И наоборот, если объект слишком велик, то лишние элементы будут отброшены: например, matrix(1:20, nrow=3, ncol=4)
.
as.matrix
преобразует свой первый аргумент в матрицу, размеры которой будут выведены из ввода.
Ответ 3
матрица создает матрицу из заданного набора значений. as.matrix пытается превратить свой аргумент в матрицу.
Кроме того, matrix()
прилагает усилия для сохранения логических матриц, т.е. Для определения специально структурированных матриц, таких как симметричные, треугольные или диагональные.
as.matrix
является универсальной функцией. Метод для фреймов данных возвращает матрицу символов, если есть только атомарные столбцы и любой столбец non- (числовой/логический/сложный), применяя as.vector
к факторам и форматируя для других символьных столбцов non-. В противном случае будет использоваться обычная иерархия приведения (logical < integer < double < complex)
, например, все логические кадры данных будут приведены к логической матрице, смешанное логическое-целое даст целочисленную матрицу и т.д.
Метод по умолчанию для as.matrix
вызывает as.vector(x)
и, следовательно, например, приводит факторы к as.vector(x)
символам.