Как передать вывод из sub () в read.table () в R - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь прочитать в CSV с этого сайта . Каждая строка заканчивается \t, что заставляет read.delim() и read.table() видеть строки данных как имеющие на 1 столбец больше, чем строка заголовка, что вызывает проблемы.

Я могу легко удалить \t с конца строк, используя этот код:

file.set <- "data_source.txt"
temp <- file.set %>% 
    readLines() %>% 
    sub(" \\t$", "", .) %>% 
    writeLines()

Я не могу понять, как передать результат команды sub() в read.delim() без записи файла, используя writeLines(). Я пробовал следующий код:

temp <- file.set %>% 
    readLines() %>% 
    sub(" \\t$", "", .) %>% 
    read.delim(quote = NULL)
#  Error in file(file, "rt") : invalid 'description' argument

temp <- file.set %>% 
    readLines() %>% 
    sub(" \\t$", "", .) %>% 
    writeLines() %>% 
    read.delim(quote = NULL)
#  [prints info from file.set to console]
#  Error in read.table(file = file, header = header, sep = sep, quote = quote,  : 
#    'file' must be a character string or connection

Проблема, вероятно, в том, что я не понимаю, как правильно использовать соединения (или что использование соединения - просто неправильный способ сделать это). Учебники, которые я нашел по использованию соединений в R, в основном касаются получения данных из удаленных баз данных, что заставляет меня думать, что я делаю это неправильно.

1 Ответ

0 голосов
/ 27 августа 2018

На самом деле вам не нужно записывать данные после того, как вы их прочитали. Вы можете передать их напрямую в параметр text= read.delim. Например

temp <- file.set %>% 
  readLines() %>% 
  sub(" \\t$", "", .) %>% 
  read.delim(text = .)

Я не могу открыть файл, который вы использовали (строка не работает для меня), но обычно было бы проще просто прочитать данные с дополнительным столбцом, а затем отбросить после импорта. Мне непонятно, с какими «проблемами» вы столкнулись, читая файл в первую очередь.

...