R 有相当于 Python f 字符串的东西吗?就像 Python 中的这个例子:
name = "Eric"
age = 42
f"Hello, {name}. You are {age}."
Run Code Online (Sandbox Code Playgroud)
我了解pasteand paste0,但它们要求您用逗号分隔不同的元素。我在互联网上搜索时找不到任何有关它的信息。
sta*_*rja 47
您可以使用glue:
library(glue)
name <- "Eric"
age <- 42
glue('Hello, {name}. You are {age}.')
#> Hello, Eric. You are 42.
Run Code Online (Sandbox Code Playgroud)
Are*_*Too 23
sprintf是 R 标准库中最直接的选项,因此您不需要安装任何其他包或库,因为它只是底层 C 函数的包装器。不过,我承认如果您不习惯的话,语法会有点棘手。
name <- "Eric"
age <- 42
sprintf("Hello, %s. You are %s.", name, age)
Run Code Online (Sandbox Code Playgroud)
结果:
[1] "Hello, Eric. You are 42."
如果您确实不喜欢那里的语法,可以尝试使用Paste0来获得相同的结果。
name <- "Eric"
age <- 42
paste0("Hello, ", name, ". You are ", age, ".")
Run Code Online (Sandbox Code Playgroud)
gsubfn 包允许您为任何函数添加前缀,fn$在这种情况下,字符参数将支持使用反引号或 $ 符号的 perl 样式字符串插值(并且公式符号可用于函数参数)。
library(gsubfn)
name <- "Eric"
age <- 42
fn$plot(0, main = "Hello, `name`. You are `age`.")
Run Code Online (Sandbox Code Playgroud)
反引号内的部分可以是 R 表达式:
fn$identity("Hello, `name`. You are `age+1`.")
## [1] "Hello, Eric. You are 43."
Run Code Online (Sandbox Code Playgroud)
如果可以从字符串推断变量名称的结尾,它还支持 $ 表示法。上面的情况并非如此,因为点在变量名中是有效的,但这可以工作:
fn$c("Hello $name")
## [1] "Hello Eric"
Run Code Online (Sandbox Code Playgroud)
还可以使用同一包中的 gsubfn。这会查找由大括号括起来的字符串,然后用其中的变量名称替换其内容。
gsubfn("{(.*?)}", get, "Hello, {name}. You are {age}.")
## [1] "Hello, Eric. You are 42."
Run Code Online (Sandbox Code Playgroud)
或者可以提供一个列表作为第二个参数
L <- list(name = "Eric", age = 42)
gsubfn("{(.*?)}", L, "Hello, {name}. You are {age}.")
## [1] "Hello, Eric. You are 42."
Run Code Online (Sandbox Code Playgroud)
使用相同的列表也可以实现这一点。它避免使用 {...},并且只要名称和年龄不出现在字符串中的其他位置就可以工作。它在列表中查找单词,即由单词字符组成的子字符串。
gsubfn("\\w+", L, "Hello, name. You are age.")
## [1] "Hello, Eric. You are 42."
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20988 次 |
| 最近记录: |