跨多行的字符串连续,没有换行符

And*_*rew 13 newline r word-wrap end-of-line rodbc

我使用RODBC库将数据导入R.我有一个很长的查询,我想传递一个变量,就像这个 SO用户.

问题是R将我的查询中的空格/回车符解释为换行符'\n'.

这个问题的公认解决方案建议简单地将文本拆分成块然后paste()一起 - 这是有效的,但理想情况下我想保持空白不变 - 这样可以更容易地在数据库中测试/验证查询的行为在粘贴到R之前

在其他语言中,我很熟悉有一个简单的行继续符 - 实际上,对接受的答案的一些评论正在寻找类似于python的方法\.

我发现strwrap在R讨论列表的内容中使用深入的解决方法,所以为了使互联网更好,我将在此处发布.但是,如果有人能指出更优雅/直接的解决方案,我将很乐意接受你的回答.

jor*_*ran 18

我不知道你是否会发现这有用或者没有,但我最终倾向于将我的SQL与我的R脚本分开.保持查询在我的R脚本中,除了非常短的脚本之外,我发现很快就无法读取.

这些天,我倾向于在他们自己独立的.sql文件中保留多行的查询.然后我可以在漂亮的文本编辑器中保持它们的美观,格式化和可读性,并根据需要通过以下方式将它们读入R:

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

为了将参数绑定到查询中,我只保留%s参数将放在.sql文件中的位置,然后在R中添加参数sprintf.

我用这种方式感到非常高兴,因为我发现使用非常长的paste语句和多行字符对象使我的R脚本混乱使我的代码真的难以阅读.


And*_*rew 13

strwrap根据文档,R 将破坏空格,包括换行符.

基本上,你可以通过最初让R引入换行符/换行符\n然后立即将它们剥离出来来获得所需的行为.

#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)
Run Code Online (Sandbox Code Playgroud)

  • 为什么不试试`gsub("\n",'',...)`,正如John Andrews在下面所说的那样?适合我. (3认同)

C8H*_*4O2 10

query <- gsub(pattern='\\s',replacement="",x=query)
Run Code Online (Sandbox Code Playgroud)