Ответ 1
Вот трюк. Вы можете использовать значение sep
, которое, как вы знаете, отсутствует в файле. Выполнение этого означает, что fread()
читает всю строку как отдельный столбец. Затем мы можем отбросить этот столбец к атомному вектору (показан ниже [[1L]]
). Вот пример на csv, где я использую ?
как sep
. Таким образом, он действует подобно readLines()
, только намного быстрее.
f <- fread("Batting.csv", sep= "?", header = FALSE)[[1L]]
head(f)
# [1] "playerID,yearID,stint,teamID,lgID,G,AB,R,H,2B,3B,HR,RBI,SB,CS,BB,SO,IBB,HBP,SH,SF,GIDP"
# [2] "abercda01,1871,1,TRO,NA,1,4,0,0,0,0,0,0,0,0,0,0,,,,,"
# [3] "addybo01,1871,1,RC1,NA,25,118,30,32,6,0,0,13,8,1,4,0,,,,,"
# [4] "allisar01,1871,1,CL1,NA,29,137,28,40,4,5,0,19,3,1,2,5,,,,,"
# [5] "allisdo01,1871,1,WS3,NA,27,133,28,44,10,2,2,27,1,1,0,2,,,,,"
# [6] "ansonca01,1871,1,RC1,NA,25,120,29,39,11,3,0,16,6,2,2,1,,,,,"
Другими необычными персонажами, которые вы можете попробовать в sep
, являются \ ^ @ # =
и другие. Мы видим, что это приведет к тому же выводу, что и readLines()
. Это просто вопрос нахождения значения sep
, которое отсутствует в файле.
head(readLines("Batting.csv"))
# [1] "playerID,yearID,stint,teamID,lgID,G,AB,R,H,2B,3B,HR,RBI,SB,CS,BB,SO,IBB,HBP,SH,SF,GIDP"
# [2] "abercda01,1871,1,TRO,NA,1,4,0,0,0,0,0,0,0,0,0,0,,,,,"
# [3] "addybo01,1871,1,RC1,NA,25,118,30,32,6,0,0,13,8,1,4,0,,,,,"
# [4] "allisar01,1871,1,CL1,NA,29,137,28,40,4,5,0,19,3,1,2,5,,,,,"
# [5] "allisdo01,1871,1,WS3,NA,27,133,28,44,10,2,2,27,1,1,0,2,,,,,"
# [6] "ansonca01,1871,1,RC1,NA,25,120,29,39,11,3,0,16,6,2,2,1,,,,,"
Примечание.. Как отмечает @Cath в комментариях, вы также можете просто использовать символ разрыва строки \n
как значение sep
.