Вот способ читать по одному элементу за раз ... Он использует тот факт, что scan
имеет параметр nmax
(а n
и nlines
- это на самом деле беспорядок!).
# First create a sample file to read from...
writeLines(c("Hello world", "and now", "Goodbye"), "foo.txt")
# Use a file connection to read from...
f <- file("foo.txt", "r")
i <- 0L
repeat {
s <- scan(f, "", nmax=1, quiet=TRUE)
if (length(s) == 0) break
i <- i + 1L
cat("Read item #", i, ": ", s, "\n", sep="")
}
close(f)
Когда сканирование встречает EOF, оно возвращает вектор нулевой длины.Таким образом, более неясный, но C-подобный способ будет выглядеть так:
while (length(s <- scan(f, "", nmax=1, quiet=TRUE))) {
i <- i + 1L
cat("Read item #", i, ": ", s, "\n", sep="")
}
В любом случае, результат будет:
Read item #1: Hello
Read item #2: world
Read item #3: and
Read item #4: now
Read item #5: Goodbye
Наконец, если бы вы могли векторизовать то, что вы делаете дляСтроки, вероятно, вам следует попытаться прочитать их несколько за раз - просто измените nmax
на, скажем, 10000
.