/ / Erro ao importar dados via source () usando Æ como separador em R - r, read.csv

Erro ao importar dados via source () usando Æ como separador em R - r, read.csv

Então este é um erro inexplicável para mim e eu sugiro que seja um bug se ninguém tiver uma explicação:

Eu tenho o seguinte código para importar um arquivo para o R:

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

O que funciona perfeitamente bem. Eu sempre exporte os dados do Access usando Æ como separador, porque é um bom caracter que nunca ocorre em meus arquivos.

Agora, para o erro:

Quando eu crio um novo arquivo ("import.r") com o código:

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

E use fonte no código original:

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

Eu recebo o erro:

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

Curiosamente, se eu não usar Æ como separador, mas | Funciona perfeitamente bem ao fazer o sourcing do arquivo. Então, o erro é aparentemente causado pelo uso Æ como um separador (como indicado no erro de qualquer maneira).

Mas como pode o mesmo comando import funcionar bem quando chamado diretamente, mas retornar um erro aparentemente não relacionado quando chamado via source()?

EDITAR: Ler o personagem usando codificações diferentes retorna resultados diferentes:

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

Configuração utf-8 codificação no código como James sugeriu em sua resposta funciona estranhamente e o arquivo é importado corretamente.

Respostas:

1 para resposta № 1

Parece ser um problema de codificação. Ao ler Æ através de uma conexão de texto com codificação utf-8 você recebe 2 caracteres retornados:

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

Estranhamente, no entanto, definir utf-8 como codificação quando a fonte permite que os dados sejam lidos corretamente.