R: chaîne multioctet non valide [dupliquer]

Cette question a déjà une réponse ici:

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.

34
r
demandé sur Martin Preusse 2011-02-14 18:19:18

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.

26
répondu Patrick B. 2011-08-19 17:52:04

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")
17
répondu dani 2013-12-06 15:41:25

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.

10
répondu Ram Narasimhan 2018-07-04 00:57:10

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.

1
répondu Solar Nick 2012-08-30 02:11:42

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é.

0
répondu Robin 2017-11-21 21:37:25