Путаница в переводе строки и пробела в R - PullRequest
0 голосов
/ 31 октября 2018

Я запутался с приведенным ниже кодом и надеюсь, что кто-то может дать мне понимание, в котором кажется, что новая строка может соответствовать пробел в gsub в R.

Вкратце, я использовал sprintf, чтобы подготовить оператор запроса SQL, и чтобы сделать код читабельным и легким для изменения, я разделил оператор на несколько строк. gsub использовался для избавления от символов новой строки, однако, к моему удивлению, \\s+ может соответствовать как новой строке, так и дополнительным пробелам.

chr = 1
pos = 1002
ref = 'A'
alt = 'G'

cmd <- sprintf("select * from MyDB 
              where `chr` ='%s'
              and pos = %i 
              and ref = %s 
              and alt = %s", 
              chr, pos, ref, alt)


cmd # where new lines were evident 

query <- gsub(pattern='\\n+',replacement=" ", cmd)
query #no new line, extra spaces remaining

query2 <- gsub(pattern='\\s+',replacement=" ", cmd)
query2 #new line and extra spaces all gone

query3 <- gsub(pattern="[[:space:]]+",replacement=" ", cmd)
query3 #same as query2

Код был протестирован в версии R 3.5.1. Надеюсь, что вы можете проверить код и поделиться своими мыслями.

1 Ответ

0 голосов
/ 31 октября 2018

\s - это символ пробела, а не буквальный пробел. см. http://regular -expressions.info / shorthand.html .

И класс символов [[:space]] задокументирован в R в регулярном выражении для обозначения: «Символы пробела: табуляция, новая строка, вертикальная табуляция, перевод формы, возврат каретки, пробел и, возможно, другие зависящие от локали символы.»

Было бы несколько странно составлять целый класс только для одного персонажа. Вы можете использовать буквальные пробелы "" в регулярных выражениях.

...