Может ли fread
из« data.table »быть принудительно успешно использован "."
как значение sep
?Использование sep = "." в `fread` из« data.table »
Я пытаюсь использовать fread
для ускорения моих concat.split
функций в "splitstackshape". См. this Gist для общего подхода, который я принимаю, и this question за то, почему я хочу сделать переключатель.
Проблема, с которой я сталкиваюсь, обрабатывает точку ("."
) в качестве значения для sep
. Всякий раз, когда я это делаю, я получаю ошибку «неожиданного персонажа».
Следующий упрощенный пример демонстрирует проблему.
library(data.table)
y <- paste("192.168.1.", 1:10, sep = "")
x1 <- tempfile()
writeLines(y, x1)
fread(x1, sep = ".", header = FALSE)
# Error in fread(x1, sep = ".", header = FALSE) : Unexpected character (
# 192) ending field 2 of line 1
Обходной у меня в текущей функции заменить "."
с другим персонажем, который, мы надеемся, нет в исходных данных, говорят "|"
, но кажется, что рискованно для меня, так как я не могу предсказать, что в чужой набор данных. Вот обходной путь в действии.
x2 <- tempfile()
z <- gsub(".", "|", y, fixed=TRUE)
writeLines(z, x2)
fread(x2, sep = "|", header = FALSE)
# V1 V2 V3 V4
# 1: 192 168 1 1
# 2: 192 168 1 2
# 3: 192 168 1 3
# 4: 192 168 1 4
# 5: 192 168 1 5
# 6: 192 168 1 6
# 7: 192 168 1 7
# 8: 192 168 1 8
# 9: 192 168 1 9
# 10: 192 168 1 10
Для целей этого вопроса, предположим, что данные сбалансированы (каждая строка будет иметь такое же количество «sep
» символов). Я знаю, что использование "."
в качестве разделителя - не самая лучшая идея, но я просто пытаюсь объяснить, что другие пользователи могут иметь в своих наборах данных, на основе otherquestionsI've answered здесь, на SO.
Я не смотрел много на источник для 'fread', поэтому не просить очевидного, но вы попытались выйти из' \\. '? –
@ RicardoSaporta, да. Вы получите сообщение об ошибке: «Ошибка в fread (x1, sep =« \\. », Header = FALSE):« sep »должен быть« авто »или одним символом». – A5C1D2H2I1M1N2O1R2T1
Я только что заметил, что после моего комментария. хм ... Я понятия не имею. Может быть, @MattDowle может перезвонить? –