В чем разница между матрицей() и 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) символам.