Как мне указать col_types, используя read_csv в ldply ()? - PullRequest
1 голос
/ 28 июня 2019

R 3,60, Windows 10

Я читаю кучу файлов .csv (001.csv ... 332.csv) и содержимое в кадре данных. Я использую read_csv в ldply для достижения этой цели. Он прекрасно работает, за исключением некоторых файлов, в которых он не может угадать, какой тип столбца правильный, до тех пор, пока по умолчанию не будет 1000 строк. Я мог бы увеличить количество строк, но я думаю, что более эффективным способом было бы явное определение col_types.

Я пытался сделать это, но я не могу найти правильный способ его кодирования.

Вот что у меня было изначально. Он работает за исключением файлов с тем, что он не может угадать правильный атомарный класс, потому что это все значения NA до 1000 строк:

dat_csv = ldply(myfiles, read_csv)

Вот что я пробовал до сих пор:

dat_csv = ldply(myfiles, read_csv(myfiles, col_names = TRUE, col_types =  
               cols(
               Date = col_date(format = ""),
               sulfate = col_double(),
               nitrate = col_double(),
               ID = col_double()
               )))

Я получаю эту ошибку:

Ошибка в fs [[i]] (x, ...): попытка применить не-функцию

Я ценю любую помощь!

1 Ответ

2 голосов
/ 28 июня 2019

Я не смог проверить это, но я думаю, что ваш вызов должен выглядеть следующим образом:

dat_csv = ldply(
  myfiles, 
  read_csv, 
  col_names = TRUE, 
  col_types = cols(
    Date = col_date(format = ""),
    sulfate = col_double(),
    nitrate = col_double(),
    ID = col_double()
  )
)

Вы также можете попробовать:

dat_csv = ldply(
  myfiles, 
  read_csv, 
  col_names = TRUE, 
  col_types = "Dddd"
)

Вы просто добавляете аргументы дляфункция read_csv() при вызове ldply.В документации говорится:

ldply (.data, .fun = NULL, ..., .progress = "none", .inform = FALSE,
.parallel = FALSE, .paropts =NULL, .id = NA)

, где

... другие аргументы, переданные .fun

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...