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 № 1Parece 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.