J'ai une matrice de 7 par 31 caractères appelée extra4
Et sa structure ressemble à ceci:
> str(extra4)
chr [1:7, 1:31] "36.88 " " 45.48 " " 52.46 " " 111.31 " " 138.45 " " 121.09 " " 122.62" ...
- attr(*, "dimnames")=List of 2
..$ : chr [1:7] "1990" "1991" "1992" "1993" ...
..$ : chr [1:31] "1" "2" "3" "4" ...
Après avoir lu des questions similaires dans SO j'ai essayé ce qui suit mais j'ai échoué:
>matrix(as.numeric(unlist(extra4)),nrow=nrow(extra4))
Warning message:
In matrix(as.numeric(unlist(extra4)), nrow = nrow(extra4)) :
NAs introduced by coercion
et j'ai aussi essayé
> class(extra4)<-"numeric"
Warning message:
In class(extra4) <- "numeric" : NAs introduced by coercion
> extra4<-apply(extra4, 1, as.numeric)
Warning messages:
1: In apply(extra4, 1, as.numeric) : NAs introduced by coercion
2: In apply(extra4, 1, as.numeric) : NAs introduced by coercion
3: In apply(extra4, 1, as.numeric) : NAs introduced by coercion
4: In apply(extra4, 1, as.numeric) : NAs introduced by coercion
5: In apply(extra4, 1, as.numeric) : NAs introduced by coercion
6: In apply(extra4, 1, as.numeric) : NAs introduced by coercion
7: In apply(extra4, 1, as.numeric) : NAs introduced by coercion
> extra4<-apply(extra4, 2, as.numeric)
There were 31 warnings (use warnings() to see them)
J'ai également essayé de changer la matrice en bloc de données, puis de faire sapply(extra4, as.numeric)
mais cela n'a pas fonctionné non plus, et j'ai également essayé d'écrire les données en csv, mais en quelque sorte la sortie finit par inclure des caractères non numériques .
C'est étrange car surtout après avoir fait ce qui précède, seuls certains des nombres sont convertis en valeurs numériques. Cependant, je suis sûr que tous les éléments sont du caractère, car lorsque je compare ceux qui sont enregistrés et ceux qui ne le sont pas, j'obtiens
> str(extra4[1,1])
chr "36.88 "
> str(extra4[1,2])
chr " 19.11 "
J'ajoute également ce qui suit pour afficher mes données plus en détail:
> dput(extra4)
structure(c("36.88 ", " 45.48 ", " 52.46 ", " 111.31 ",
" 138.45 ", " 121.09 ", " 122.62", " 19.11 ", " 27.97 ",
" 37.14 ", " 47.68 ", " 60.78 ", " 35.84 ", " 38.64",
" 56.21 ", " 74.94 ", " 92.3 ", " 118.62 ", " 138.13 ",
" 104.65 ", " 113.98", " 30.48 ", " 51.54 ", " 61.57 ",
" 99.87 ", " 80.9 ", " 84.97 ", " 99.34", "20.16 ",
" 24.76 ", " 27.76 ", " 37.53 ", " 50.53 ", " 28.8 ",
" 25.06", " 87.73 ", " 98.68 ", " 119.95 ", " 150.74 ",
" 214.35 ", " 118.5 ", " 129.19", " 32.36 ", " 36.52 ",
" 42.67 ", " 56.55 ", " 89.22 ", " 49.97 ", " 50.62",
"35.09 ", " 40.77 ", " 48.43 ", " 82.61 ", " 120.1 ",
" 72.43 ", " 76.69", " 47.21 ", " 67.25 ", " 78.62 ",
" 66.64 ", " 83.78 ", " 127.79 ", " 154.11", " 86.1 ",
" 127.59 ", " 164.43 ", " 249.32 ", " 312.01 ", " 272.09 ",
" 265.68", " 83.75 ", " 118.41 ", " 171.52 ", " 229.27 ",
" 241.63 ", " 201 ", " 213.01", " 36.63 ", " 52.1 ",
" 66.03 ", " 101.38 ", " 126.71 ", " 95.46 ", " 110.03",
" 57.5 ", " 75.72 ", " 101.31 ", " 147.5 ", " 171.01 ",
" 148.66 ", " 167.93", " 29.56 ", " 38.37 ", " 48.8 ",
" 65.5 ", " 84.77 ", " 75.2 ", " 81.27", " 77.28 ",
" 93.7 ", " 119.62 ", " 247 ", " 301.76 ",
" 222.52 ", " 244.46", " 45.6 ", " 54.32 ", " 87.81 ",
" 132.93 ", " 163.62 ", " 152.99 ", " 170.85", " 27.13 ",
" 36.96 ", " 48.94 ", " 80.01 ", " 124.07 ", " 93.49 ",
" 105.57", " 54.55 ", " 85.93 ", " 102.3 ", " 122.7 ",
" 168.36 ", " 151.79 ", " 169.65", " 86.19 ", " 121.82 ",
" 191.7 ", " 247.75 ", " 260.23 ", " 196.48 ", " 243.06",
"47.35 ", " 60.63 ", " 76.4 ", " 93.04 ", " 102.13 ",
" 98.29 ", " 86.27", " 10.93 ", " 13.33 ", " 16.82 ",
" 18.2 ", " 23.48 ", " 16.52 ", " 16.19", " NA ",
" NA ", " NA ", " NA ", " 69.46 ",
" 54.22 ", " 60.16", " 60.93 ", " 89.86 ", " 141.85 ",
" 207.9 ", " 182.79 ", " 159.1 ", " 159.46", " 15.37 ",
" 18.48 ", " 24.33 ", " 38.37 ", " 45.87 ", " 34.86 ",
" 31.96", " 34.05 ", " 40.1 ", " 55.02 ", " 58.31 ",
" 86.89 ", " 65.68 ", " 65.68", "1.51 ", " 0.93 ",
" 1 ", " 1.78 ", " 2.8 ", " 1.56 ",
" 1.41", " 27.15 ", " 31.37 ", " 39.46 ", " 40.33 ",
" 61.86 ", " 45.18 ", " 57.71", " 14.74 ", " 16.3 ",
" 25.06 ", " 31.74 ", " 37.39 ", " 27.18 ", " 30.49",
" 3.59 ", " 4.86 ", " 5.67 ", " 6.36 ",
" 7.6 ", " 4.8 ", " 5.5", "4.73 ", " 5.68 ",
" 7.3 ", " 8.53 ", " 11.03 ", " 8.44 ",
" 9.84", "16.76 ", " 24.83 ", " 32.66 ", " 46.22 ",
" 48.01 ", " 43.44 ", " 48.29"), .Dim = c(7L, 31L), .Dimnames = list(
c("1990", "1991", "1992", "1993", "1994", "1995", "1996"),
c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11",
"12", "13", "14", "15", "16", "17", "18", "19", "20", "21",
"22", "23", "24", "25", "26", "27", "28", "29", "30", "31"
)))
sessionInfo()
a donné ce qui suit:
> sessionInfo()
R version 3.0.0 (2013-04-03)
Platform: x86_64-Apple-darwin10.8.0 (64-bit)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] gdata_2.13.2
loaded via a namespace (and not attached):
[1] gtools_2.7.1 tools_3.0.0
Il n'y a pas vraiment de problème ici, pas avec la plupart des options que j'ai essayées. Vous obtenez avertissements mais ceux-ci se rapportent aux chaînes "NA"
, Qui parce qu'elles ne sont pas NA
ni un nombre stocké dans une chaîne, R ne sait pas quoi faire avec eux et les change en NA
. C'est tout ce que l'avertissement vous dit. Par conséquent
apply(extra4, 2, as.numeric)
sapply(extra4, as.numeric)
class(extra4) <- "numeric"
storage.mode(extra4) <- "numeric"
tous fonctionnent et avertissent tous des valeurs "NA" (ou de leurs variantes) dans la colonne 22 de extra4
:
Warning message:
In storage.mode(m) <- "numeric" : NAs introduced by coercion
mais ce ne sont que des avertissements et dans ce cas peuvent être ignorés. S'ils vous dérangent, vous pouvez envelopper l'appel dans suppressWarnings()
> suppressWarnings(storage.mode(m) <- "numeric")
mais c'est dangereux car cela arrêtera tous les avertissements, pas seulement celui concernant les NA
s.
Si vous avez une matrice de caractères m, c'est-à-dire.
m <- matrix(data = c("1","2","3","4","5","6"), ncol = 2, nrow = 3)
Mappez simplement sous forme numérique, c'est-à-dire.
m <- mapply(m, FUN=as.numeric)
Et utilisez les données pour reconstruire la matrice avec les mêmes dimensions que la matrice m d'origine, c'est-à-dire.
m <- matrix(data=m, ncol=2, nrow=3)