2013-06-04 7 views
9

Je courais le suivant dans R et a reçu la même sortie pour les matrix() et as.matrix() et maintenant je ne suis pas sûr de ce que la différence entre eux est:Quelle est la différence entre matrix() et as.matrix() dans r?

> 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 
+4

Lire la documentation. Par exemple, comparez la sortie de 'DF <- data.frame (a = 1: 5, b = 6: 10); as.matrix (DF); matrice (DF) ». – Roland

+1

oui mais je ne suis pas en train de traiter des données, c'est-à-dire que ma matrice est uniquement numérique. –

+2

Vous avez demandé la différence entre ces fonctions. La différence est documentée et je vous ai montré un exemple. Que les fonctions puissent (dans des circonstances spécifiques) donner le même résultat n'a aucun impact sur la réponse à votre question. – Roland

Répondre

9

matrix prend data et d'autres arguments nrow et 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 est un procédé avec des comportements différents pour différents types, mais surtout à redonner une matrice n * m * n à partir d'une entrée de 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. 

La différence entre les deux provient principalement de la forme de l'entrée, matrix ne se soucie pas de la forme, as.matrix fait affaire et le maintenir (bien que les détails dépendent des méthodes réelles pour l'entrée, et le cas d'un vecteur adimensionnelle correspond à une seule matrice de la colonne). Il n'a pas d'importance si l'entrée est brute, logique, nombre entier, numérique, caractère, ou complexe, etc.

4

matrixconstructions une matrice à partir de son premier argument, avec un nombre donné de lignes et de colonnes. Si l'objet fourni n'est pas assez grand pour la sortie désirée, matrix va recycler ses éléments: par exemple, matrix(1:2), nrow=3, ncol=4). Inversement, si l'objet est trop grand, les éléments excédentaires seront supprimés: par exemple, matrix(1:20, nrow=3, ncol=4).

as.matrixconvertit son premier argument en une matrice dont les dimensions seront déduites de l'entrée. La matrice

0

crée une matrice à partir de l'ensemble de valeurs donné. As.matrix essaie de transformer son argument en une matrice. En outre, Matrix() s'efforce de garder des matrices logiques logiques, c'est-à-dire, et de déterminer des matrices spécialement structurées telles que des matrices symétriques, triangulaires ou diagonales. As.matrix est une fonction générique. La méthode pour les trames de données renverra une matrice de caractères s'il n'y a que des colonnes atomiques et toute colonne non (numérique/logique/complexe), en appliquant comme .vector aux facteurs et au format d'autres colonnes non-caractère. Dans le cas contraire, la hiérarchie habituelle de la contrainte (logique entier < < à double < complexe) sera utilisé, par exemple, toutes-logiques trames de données seront contraints à une matrice logique, entier logique mixte donnera une matrice entière, etc.

La méthode par défaut pour as.matrix appelle as.vector (x), et par conséquent contraint les facteurs aux vecteurs de caractères.

Questions connexes