Продолжение строки по нескольким строкам, символы новой строки

Я использую библиотеку RODBC для переноса данных в R. У меня есть длинный запрос, который я хочу передать переменной, подобно этому пользователю SO.

Проблема в том, что R интерпретирует пробелы/каретки в моем запросе как новую строку '\n'.

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

На других языках я знаком с простым символом продолжения строки - действительно, некоторые из комментариев в принятом ответе ищут подход, похожий на python \.

Я нашел в стороне обходное решение, используя strwrap в глубине списка дискуссий R, поэтому в интересах улучшения интернета я опубликую его здесь. Однако, если кто-то может указать направление на более элегантное/прямое решение, я с радостью приму ваш ответ.

Ответ 1

query <- gsub(pattern='\\s',replacement="",x=query)

Ответ 2

Я не знаю, найдете ли вы это полезное или нет, но в конечном итоге я склонен к тому, чтобы мой SQL был отделен от моих R-скриптов. Сохраняя запрос в моем R script, за исключением очень очень коротких, я считаю, что он не читается очень быстро.

В наши дни я стараюсь хранить запросы, которые являются более чем одной строкой в ​​отдельном файле .sql. Затем я могу сохранить их красивыми, отформатированными и читаемыми в хорошем текстовом редакторе и прочитать их в R по мере необходимости через что-то вроде этого:

read_sql <- function(path){
    stopifnot(file.exists(path))
    sql <- readChar(path,nchar = file.info(path)$size)
    sql
}

Для привязки параметров к запросам я просто сохраняю %s, где параметр будет в файле .sql, а затем добавьте параметры в R с помощью sprintf.

Мне было намного счастливее, так как я обнаружил, что загромождаю мои R-скрипты с действительно длинными операторами paste и многострочными символьными объектами, из-за которых мой код действительно трудно читать.

Ответ 3

R strwrap уничтожит пробелы, включая символы новой строки, в документация.

По существу, вы можете получить желаемое поведение, сначала разрешив R ввести строки break/newline \n s, а затем сразу же их отключить.

#make query using PASTE
query_1 <- paste("SELECT map.ps_studentid 
      ,students.first_name || ' ' || students.last_name AS full_name
      ,map.testritscore
      ,map.termname
      ,map.measurementscale
FROM map$comprehensive_with_growth map
JOIN students 
  ON map.ps_studentid = students.id
WHERE map.termname = '",map_term,"'", sep='')

#remove newline characters introduced above.  
#width is an arbitrary big number-
#it just needs to be longer than your string.
query_1 <- strwrap(query_1, width=10000, simplify=TRUE)

#execute the query 
map_njask <- sqlQuery(XE, query_1)

Ответ 4

Попробуйте использовать sprintf для получения подстановки переменных, а затем замените все символы новой строки и пробелы.

Подробнее см. мой ответ.