Mise à l'échelle des données dans R donne la fausse Erreur “longueur du "centre" doit être égal au nombre de colonnes de”x""
Je suis en train d'échelle de données.cadre dans la gamme de 0 et de 1, en utilisant le code suivant:
for(i in 1:nrow(data))
{
x <- data[i, ]
data[i, ] <- scale(x, min(x), max(x)-min(x))
}
Data:
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17
15 6 6 0 9 3 1 4 5 1 1 13 0 0 20 5 28
2 24 14 7 0 15 7 0 11 3 3 4 15 7 0 30 0 344
3 10 5 2 0 6 2 0 5 0 0 2 7 1 0 11 0 399
4 9 4 2 0 5 2 0 4 0 0 2 6 1 0 10 0 28
5 6 2 1 0 3 1 0 2 0 0 1 3 1 0 6 0 82
6 9 4 2 0 5 2 0 4 0 0 2 6 1 0 10 0 42
Mais j'obtiens le message d'erreur suivant:
Error in scale.default(x, min(x), max(x) - min(x)) (from #4) :
length of 'center' must equal the number of columns of 'x'
Vous devez vous connecter pour publier un commentaire.
À l'aide de ces données , votre exemple qui fonctionne pour moi:
Ici une autre option à l'aide de l'échelle , sans boucle. Vous avez juste besoin de fournir un
scale
et uncenter
avec les mêmes colonnes que votre matrice.MODIFIER comment accéder au résultat.
L'échelle renvoie une matrice avec 2 attributs. Pour obtenir un ensemble de données.cadre, vous avez besoin simplement de les contraindre le résultat d'échelle pour les données.cadre.
as.vector(data)
pour les supprimer.attributes(x) <- list(dim=dim(x))
apply
pour trouver lemin
etmax
numériquedata.frame
oumatrix
. Parce que c'est juste un vecteur avecdim
attributs que vous pouvez juste fairemin(data)
, etmax(data)
.min(data)
va me donner juste un scalaire. J'ai besoin d'un vecteur avec le même nombre de colonnes de l'origine de la matrice pour définir lascale
argument ...scale
correctement et j'ai besoin d'aller loin et de lire. Si je devais essayer à l'échelle d'une matrice de valeurs entre 0 et 1, je serais en utilisant les minima et maxima de l'ensemble de la matrice.data <- 1 / max( data ) * data
(data-min(data)) / (max( data)-min(data) )
...Mais , ici, la question était à propos de l'utilisation descale
.La
center
etscale
arguments pourscale
avoir une longueur égale au nombre de colonnes dansx
. Il ressemble àdata
est undata.frame
, de sorte que votrex
a autant de colonnes que votredata.frame
n', et donc le conflit. Vous pouvez passer cet écueil trois façons:scale
(qui va la traiter comme une seule colonne):scale(as.numeric(x), ...)
data
dans unmatrix
, qui tombe ligne extractions en atomic vecteurs automatiquement.apply
suggestion, qui serait de savoir si c'est undata.frame
ou unmatrix
et est sans doute la "bonne" façon de faire dans R.il y a aussi une autre manière de faire évoluer les données en créant une fonction