Я бы хотел прочитать только первый символ из каждой строки текстового файла, игнорируя остальные.
Вот пример файла:
x <- c(
"Afklgjsdf;bosfu09[45y94hn9igf",
"Basfgsdbsfgn",
"Cajvw58723895yubjsdw409t809t80",
"Djakfl09w50968509",
"E3434t"
)
writeLines(x, "test.txt")
Я могу решить проблему, прочитав все с помощью readLines
и используя substring
, чтобы получить первый символ:
lines <- readLines("test.txt")
substring(lines, 1, 1)
## [1] "A" "B" "C" "D" "E"
Это кажется неэффективным. Есть ли способ убедить R читать только первые символы, вместо того, чтобы отбрасывать их?
Я подозреваю, что должно быть какое-то заклинание, используя scan
, но я не могу его найти. Альтернативой может быть манипуляция с файлами низкого уровня (возможно, с seek
).
Так как производительность важна только для больших файлов, здесь большой тестовый файл для сравнения:
set.seed(2015)
nch <- sample(1:100, 1e4, replace = TRUE)
x2 <- vapply(
nch,
function(nch)
{
paste0(
sample(letters, nch, replace = TRUE),
collapse = ""
)
},
character(1)
)
writeLines(x2, "bigtest.txt")
Обновление. Кажется, вы не можете избежать сканирования всего файла. Похоже, что лучшие достижения скорости используют более быструю альтернативу readLines
(Ричард Скривен stringi::stri_read_lines
решение и Josh O ' Brien data.table::fread
) или обрабатывать файл как двоичный (решение Martin Morgan readBin
).