Je suis en train d'utiliser :
Version R 3.0.0 (2013-04-03) -- "Masked Marvel"
Plateforme : x86_64-pc-linux-gnu (64 bits)
J'essaie d'utiliser read.csv
pour entrer un petit extrait de données CSV + en-tête, directement depuis le terminal.
Je rencontre un problème qui pourrait être lié à R saute des lignes depuis /dev/stdin et read.csv, en-tête sur la première ligne, sauter la deuxième ligne mais c'est suffisamment différent (les réponses là-bas n'expliquent pas ce que je vois ici) pour justifier une question distincte.
Il semble que R saute la ligne d'en-tête et traite la deuxième ligne (de données) comme un en-tête :
R> d <- read.csv(file='/dev/stdin', header=TRUE)
a,b
1,2
3,4
# appuyez sur CTRL-D deux fois ici pour terminer l'entrée
# (c'est aussi inattendu :
# lors de la lecture de quelques lignes de manière interactive dans bash, un CTRL-D suffit.
# Pourquoi est-il nécessaire d'appuyer deux fois en R ?)
R> d
X1 X2
1 3 4
R> colnames(d)
[1] "X1" "X2"
J'ai trouvé une solution de contournement : étant donné que par défaut read.csv
a blank.lines.skip = TRUE
, je préfixe l'entrée avec quelques lignes vides. 5 lignes vides avant de commencer l'entrée semblent être le minimum requis pour que cela fonctionne comme prévu. Au fait : une seule ligne avec 5 espaces fonctionne tout aussi bien, ce qui laisse penser à un rembourrage d'au moins 5 octets requis :
R> d <- read.csv(file='/dev/stdin', header=TRUE)
a,b
1,2
3,4
# Appuyez sur CTRL-D deux fois ici pour marquer la fin de l'entrée du terminal
R> d
a b
1 1 2
2 3 4
R> colnames(d)
[1] "a" "b"
Questions :
- Pourquoi le premier exemple ne fonctionne-t-il pas comme prévu ?
- Pourquoi faut-il 5 lignes vides ou des espaces (même 4 ne suffisent pas) pour que cela fonctionne ?
- Existe-t-il une meilleure façon de lire un court extrait de CSV directement depuis le terminal ? (Je connais
scan
etreadLines
, mais mes données sont déjà au format CSV, donc je veux le rendre aussi simple que possible à lire/analyser/assigner)