/ / Fehler beim Importieren von Daten über source () mit Æ als Trennzeichen in R - r, read.csv

Fehler beim Importieren von Daten über source () mit Æ als Trennzeichen in R - r, read.csv

Dies ist also ein unerklärlicher Fehler für mich und ich würde vorschlagen, dass es ein Fehler ist, wenn niemand eine Erklärung hat:

Ich habe den folgenden Code, um eine Datei in R zu importieren:

rm(list = ls())
library(data.table)
DT <- data.table(read.csv("file.csv", header=TRUE, sep = "Æ", quote = "", dec = ",", stringsAsFactors=TRUE, row.names = NULL))

Was einwandfrei funktioniert. Ich exportiere die Daten immer von Access mit Æ als Trennzeichen, weil es ein schönes Zeichen ist, das niemals in meinen Dateien vorkommt.

Nun zum Fehler:

Wenn ich eine neue Datei erstelle ("import.r") mit dem Code:

DT <- data.table(read.csv("file.csv", header=TRUE, sep = "Æ", quote = "", dec = ",", stringsAsFactors=TRUE, row.names = NULL))

Und Quellcode im Originalcode verwenden:

rm(list = ls())
library(data.table)
source("import.r")

Ich bekomme den Fehler:

Error in scan(file, what = "", sep = sep, quote = quote, nlines = 1, quiet = TRUE,  :
invalid "sep" value: must be one byte

Interessanterweise, wenn ich nicht benutze Æ als Trennzeichen aber | Es funktioniert einwandfrei beim Sourcing der Datei. Der Fehler wird also offensichtlich durch die Verwendung verursacht Æ als Trennzeichen (wie ohnehin im Fehler angegeben).

Aber wie kann der gleiche Importbefehl funktionieren, wenn er direkt aufgerufen wird, aber beim Aufruf über über einen scheinbar nicht zusammenhängenden Fehler zurückgegeben wird source()?

BEARBEITEN: Das Lesen des Zeichens mit verschiedenen Kodierungen führt zu unterschiedlichen Ergebnissen:

> readLines(textConnection("Æ",encoding="utf-8"))
[1] "Æ"
> readLines(textConnection("Æ"))
[1] "Æ"

Rahmen utf-8 Kodierung im Code, wie James in seiner Antwort vorschlägt, funktioniert merkwürdig und die Datei wird korrekt importiert.

Antworten:

1 für die Antwort № 1

Es scheint ein Codierungsproblem zu sein. Beim Lesen Æ In einer Textverbindung mit utf-8-Codierung erhalten Sie 2 Zeichen:

readLines(textConnection("Æ",encoding="utf-8"))
[1] "Æ"

Seltsamerweise können Sie jedoch bei der Verwendung von utf-8 als Kodierung die Daten korrekt einlesen.