使用magrittr在glue_data中插入Separator

时间:2017-11-16 06:03:29

标签: r tidyverse

我正在从数据框中构建一个简单的INSERT INTO查询,就像玩具示例一样:

library(datasets)
library(magrittr)
library(reprex)
insert_into_01 <-
    "INSERT INTO teams (mpg, cyl, disp, hp, drat)\nVALUES"

# The separator does not get inserted at the end of each () line
insert_into_02 <- head(mtcars, 5) %>%
    glue::glue_data("({mpg}, {cyl}, {disp}, \\
                    {hp}, {drat})", .sep = ",")

insert_into_03 <- ";"

qry_create_teams_04 <- stringr::str_c(c(insert_into_01, insert_into_02, 
                                        insert_into_03),
                                      collapse = "\n")

qry_create_teams_04 %>% cat()
#> INSERT INTO teams (mpg, cyl, disp, hp, drat)
#> VALUES
#> (21, 6, 160, 110, 3.9)
#> (21, 6, 160, 110, 3.9)
#> (22.8, 4, 108, 93, 3.85)
#> (21.4, 6, 258, 110, 3.08)
#> (18.7, 8, 360, 175, 3.15)
#> ;

问题是.sep命令似乎没有在glue_data函数中正确传递。每个条目后,值条目应该有一个逗号,

编辑:预期输出为:

#> INSERT INTO teams (mpg, cyl, disp, hp, drat)
#> VALUES
#> (21, 6, 160, 110, 3.9), #<-- see the comma at the end
#> (21, 6, 160, 110, 3.9), #<-- another comma here
#> (22.8, 4, 108, 93, 3.85),
#> (21.4, 6, 258, 110, 3.08),
#> (18.7, 8, 360, 175, 3.15) # <-- no comma for the last entry
#> ;

有人可以帮忙解决上述问题吗?

我特别希望编码以尽可能干净地使用 tidyverse glue 包来理想地实现这一目标

1 个答案:

答案 0 :(得分:-1)

.sep是在提供多个参数时应用的分隔符。如果需要尾随字符,只需将其添加为最后一个参数:

glue_data(head(mtcars, 4), "({mpg}, {cyl}, {disp}, {hp}, {drat})", ",")
#> (21, 6, 160, 110, 3.9),
#> (21, 6, 160, 110, 3.9),
#> (22.8, 4, 108, 93, 3.85),
#> (21.4, 6, 258, 110, 3.08),

这假设一个空的分隔符"",这是默认的。