考虑以下几点:
> n <- 1:4
> n
[1] 1 2 3 4
我想转换n
以便我得到一个字符串,它是'1','2','3','4'
(在R
中,将显示为"'1','2','3','4'"
)。
当我将sqlQuery()
与变量字符串一起使用时,经常会出现这种情况。不幸的是,我对RegEx不够熟悉,无法轻松执行此操作。
我最接近的是
> paste0(n, collapse = "", sep = ",")
[1] "1,2,3,4,"
它不会在每个数字周围放置单引号,并且在末尾有额外的逗号。
一种选择是将sprintf
与paste0
一起使用,
paste0(sprintf("'%d'", 1:4), collapse = ", ")
#[1] "'1', '2', '3', '4'"
其中%d
是C系列格式化函数(printf
、sprintf
等)中有符号整数的标准格式化标志。您可以在帮助文件(? sprintf
)中看到各种选项。
与其他替代方案相比,我更喜欢这一点,因为sprintf
调用解决了单个元素的格式问题,而paste0(…,崩溃="
我经常使用sprintf
cat(sprintf("INSERT INTO #tmp(x, y, z) VALUES('%s', %d, %.2f);",
letters[1:5], 1:5, rnorm(5)),
sep = "\n"
)
#INSERT INTO #tmp(x, y, z) VALUES('a', 1, -1.10);
#INSERT INTO #tmp(x, y, z) VALUES('b', 2, 0.24);
#INSERT INTO #tmp(x, y, z) VALUES('c', 3, -0.82);
#INSERT INTO #tmp(x, y, z) VALUES('d', 4, -0.46);
#INSERT INTO #tmp(x, y, z) VALUES('e', 5, 0.72);