考虑以下:
> n <- 1:4
> n
[1] 1 2 3 4
Run Code Online (Sandbox Code Playgroud)
我想转换,n以便我得到一个字符串'1', '2', '3', '4'(其中R,将显示为"'1', '2', '3', '4'").
当我使用sqlQuery()变量字符串时,通常会出现这种情况.遗憾的是,我对RegEx不够熟悉,无法轻松执行此操作.
我最接近的是
> paste0(n, collapse = "", sep = ",")
[1] "1,2,3,4,"
Run Code Online (Sandbox Code Playgroud)
它不会在每个数字周围加上单引号,并且最后会有额外的逗号.
一种选择是使用sprintf与paste0,
paste0(sprintf("'%d'", 1:4), collapse = ", ")
#[1] "'1', '2', '3', '4'"
Run Code Online (Sandbox Code Playgroud)
其中%d是用于从C家族的格式化功能(带符号的整数的标准格式标志printf,sprintf等).您可以在帮助文件(?sprintf)中看到各种选项.
我更喜欢这个替代方案,因为sprintf调用解决了单个元素的格式,而paste0(..., collapse = "<whatever>")处理元素的组合; 不过,您的意见可能有所不同.
我经常使用sprintf&cat,结合paste0等功能,当我需要生成冗余表达式来复制到SQL Server或生成C++宏等.例如,一束的INSERT语句
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3202 次 |
| 最近记录: |