在向量上使用 R 的胶水进行字符串插值,无需多次调用

String interpolation with R's glue on a vector, without calling it multiple times

我希望在向量上使用 R 的 glue::glue() 进行字符串插值,而不需要多次调用它。

示例:

df <- data.frame(x = 1:10)

glue::glue("No. of Rows: {dim(df)[1]}, No. of Columns: {dim(df)[2]}")

会按要求给予:

No. of Rows: 10, No. of Columns: 1

但是我调用了两次 dim(df),它是一个长度为 2 的向量。

我想知道 glue 是否可以使用 % 运算符处理类似于 Python 中的字符串插值:

import pandas as pd

df = pd.DataFrame({"x": range(10)})
print('No. of Rows: %d, No. of Columns: %d' % df.shape)

无需调用 df.shape 两次即可提供相同的所需输出。

我不确定您是否可以在本地执行此操作,但您可以做的一件事是将其包装在一个函数中:

f <- function(x) glue::glue("No. of Rows: {x[1]}, No. of Columns: {x[2]}")

f(dim(df))

您可以使用它,类似于 Python 的 f 字符串插值:

shape <- dim(df)
glue::glue("No. of Rows: {shape[1]}, No. of Columns: {shape[2]}")

是的,你可以这样做:

glue("nr = {x[1]}, nc = {x[2]}", x = dim(mtcars))
# nr = 32, nc = 11

根据 ?glue 文档,... 的描述是:

Unnamed arguments are taken to be expressions string(s) to format. Multiple inputs are concatenated together before formatting. Named arguments are taken to be temporary variables available for substitution.

(强调我的,突出与该问题相关的部分。)