Чтение блоков текста в R с ошибками разбора - PullRequest
1 голос
/ 24 октября 2019

Я читаю функции моего пакета в R, заменяю некоторые переменные и снова сохраняю файлы. Это делается для стандартизации именования функций во всем пакете.

Код не объявляет ошибок или предупреждений для функций, кроме одной (я еще не проверял, работают ли функции на самом деле!). Проблема является проблемой синтаксического анализа. Я сузил строки кода до следующего.

Я использовал read_delim, так как readLines не работает с кавычками.

{test <- '
print(paste("Time taken for simulation", i, "is",
                     SimulationRoundTime,
                     "minutes. Est time to completion",
                     round(as.numeric(TimeToCompletion, units = TimeUnit)), #
                     TimeUnit,
                     "Est completion time is",
                     ExpectedCompletionTime))'
  }

read_delim(test, delim ="[\n]",
                      col_names = F, col_types = "c")

Почему read_delim говорит, что 3 строки не 7?

предупреждениеЯ получаю это

Warning: 4 parsing failures.
row col                     expected actual         file
  3  X1 delimiter or quote                , literal data
  3  X1 delimiter or quote                E literal data
  3  X1 delimiter or quote                , literal data
  3  X1 closing quote at end of file        literal data

1 Ответ

1 голос
/ 24 октября 2019

Это, вероятно, запутано, потому что test на самом деле не текст с разделителями. Может быть, это как-то связано с двойными кавычками и переводами строки. В любом случае вам лучше использовать stringr::str_split(test, "\\n")[[1]] или readr::read_lines(test) (или версии base R). Оба вернут это:

[1] ""                                                                             
[2] "print(paste(\"Time taken for simulation\", i, \"is\","                        
[3] "                     SimulationRoundTime,"                                    
[4] "                     \"minutes. Est time to completion\","                    
[5] "                     round(as.numeric(TimeToCompletion, units = TimeUnit)), #"
[6] "                     TimeUnit,"                                               
[7] "                     \"Est completion time is\","                             
[8] "                     ExpectedCompletionTime))"                                
...