R: chaîne multioctet non valide [dupliquer]
Cette question a déjà une réponse ici:
- Chaîne multioctet non valide en lecture.csv 7 réponses
J'utilise le lire.delim (nom de fichier) sans aucun paramètre pour lire un fichier texte délimité par des tabulations dans R.
df = read.delim(file)
Cela a fonctionné comme prévu. Maintenant, j'ai un message d'erreur étrange et je n'y comprends rien:
Error in type.convert(data[[i]], as.is = as.is[i], dec = dec, na.strings = character(0L)) :
invalid multibyte string at '<fd>'
Calls: read.delim -> read.table -> type.convert
Execution halted
Quelqu'un Peut-il expliquer ce qu'est un chaîne multi-octets est? Qu'est-fd veux dire? Existe-t-il d'autres façons de lire un fichier tab dans R? J'ai des en-têtes de colonne et des lignes qui n'ont pas de données pour toutes les colonnes.
5 réponses
Je me rends compte que c'est assez tard, mais j'ai eu un problème similaire et j'ai pensé que je posterais ce qui fonctionnait pour moi. J'ai utilisé l'utilitaireiconv (par exemple, "iconv file.pcl -f UTF-8 -t ISO-8859-1 -c"
). L'option "-c" ignore les caractères qui ne peuvent pas être traduits.
J'ai eu un problème similaire avec un fichier du programme E-prime (edat - > conversion SPSS), mais j'ai découvert qu'il y a beaucoup d'encodages supplémentaires que vous pouvez utiliser. cela a fait l'affaire pour moi:
tbl <- read.delim("dir/file.txt", fileEncoding="UCS-2LE")
Si vous voulez une solution R, voici une petite fonction de commodité que j'utilise parfois pour trouver où se cache le caractère offensant (multi-octets). Notez que c'est le caractère suivant de ce qui est imprimé. Cela fonctionne parce que print
fonctionnera bien, mais substr
génère une erreur lorsque des caractères multioctets sont présents.
find_offending_character <- function(x, maxStringLength=256){
print(x)
for (c in 1:maxStringLength){
offendingChar <- substr(x,c,c)
#print(offendingChar) #uncomment if you want the indiv characters printed
#the next character is the offending multibyte Character
}
}
string_vector <- c("test", "Se\x96ora", "works fine")
lapply(string_vector, find_offending_character)
Je corrige ce personnage et je l'exécute à nouveau. J'espère que cela aide quelqu'un qui rencontre l'erreur invalid multibyte string
.
Cela m'est arrivé parce que j'avais le symbole 'copyright' dans une de mes chaînes! Une fois qu'il a été supprimé, Problème résolu.
Une bonne règle de base, assurez-vous que les caractères qui n'apparaissent pas sur votre clavier sont supprimés si vous voyez cette erreur.
J'ai compris que Leafpad était un éditeur de texte adéquat et simple pour afficher et enregistrer/convertir dans certains jeux de caractères - du moins dans le monde linux.
J'ai utilisé ceci pour enregistrer le Latin-15 en UTF-8 et cela a fonctionné.