将 table 作为函数参数和值传递
passing a table as function parameters and values
假设我有以下函数,它有很多参数,但为了简单起见,我在这里只列出两个:
library(glue)
glue("{a} + {b} is equal to 3", a = 1, b = 2)
现在我有一个 data.table,其中包含我要传递给 glue
函数的所有 arguments/values:
data.table:
library(data.table)
DT <- data.table(varnames = c("a", "b"), values = c(1, 2))
如何将 arguments/values 从我的 DT
直接传递到我的 glue
函数?
在这种情况下,如果您将 a
和 b
作为单独的列,将会有所帮助。
library(data.table)
library(glue)
DT_Wide <- dcast(DT, rowid(varnames)~varnames, value.var = 'values')
DT_Wide
# varnames a b
#1: 1 1 2
那你可以用glue_data
-
glue_data(DT_Wide, "{a} + {b} is equal to 3")
#1 + 2 is equal to 3
您可以使用 setNames
并调用 glue_data
:
glue_data(setNames(DT$values, DT$varnames), "{a} + {b} is equal to 3")
#1 + 2 is equal to 3
或者您使用 do.call
:
do.call(glue, as.list(c("{a} + {b} is equal to 3",
setNames(DT$values, DT$varnames))))
#1 + 2 is equal to 3
有点hackish,但完成了工作并概括为更大的data.frame:
DT <- data.table(varnames = c("a", "b", "c"), values = c(1, 2, 3))
DT[, glue_data(
setNames(values, varnames),
glue_data(
.SD,
"{paste(sprintf('{%s}', varnames), collapse = ' + ')}", " is equal to {sum(values)}"
)
)]
# 1 + 2 + 3 is equal to 6
我会保持简单并使用基础 R 的 with
,因为这是有用的好例子:
library(glue)
library(data.table)
DT = data.table(varnames = c("a", "b"), values = c(1, 2))
with(
as.list(setNames(DT$values, DT$varnames)),
glue("{a} + {b} is equal to 3")
)
#1 + 2 is equal to 3
假设我有以下函数,它有很多参数,但为了简单起见,我在这里只列出两个:
library(glue)
glue("{a} + {b} is equal to 3", a = 1, b = 2)
现在我有一个 data.table,其中包含我要传递给 glue
函数的所有 arguments/values:
data.table:
library(data.table)
DT <- data.table(varnames = c("a", "b"), values = c(1, 2))
如何将 arguments/values 从我的 DT
直接传递到我的 glue
函数?
在这种情况下,如果您将 a
和 b
作为单独的列,将会有所帮助。
library(data.table)
library(glue)
DT_Wide <- dcast(DT, rowid(varnames)~varnames, value.var = 'values')
DT_Wide
# varnames a b
#1: 1 1 2
那你可以用glue_data
-
glue_data(DT_Wide, "{a} + {b} is equal to 3")
#1 + 2 is equal to 3
您可以使用 setNames
并调用 glue_data
:
glue_data(setNames(DT$values, DT$varnames), "{a} + {b} is equal to 3")
#1 + 2 is equal to 3
或者您使用 do.call
:
do.call(glue, as.list(c("{a} + {b} is equal to 3",
setNames(DT$values, DT$varnames))))
#1 + 2 is equal to 3
有点hackish,但完成了工作并概括为更大的data.frame:
DT <- data.table(varnames = c("a", "b", "c"), values = c(1, 2, 3))
DT[, glue_data(
setNames(values, varnames),
glue_data(
.SD,
"{paste(sprintf('{%s}', varnames), collapse = ' + ')}", " is equal to {sum(values)}"
)
)]
# 1 + 2 + 3 is equal to 6
我会保持简单并使用基础 R 的 with
,因为这是有用的好例子:
library(glue)
library(data.table)
DT = data.table(varnames = c("a", "b"), values = c(1, 2))
with(
as.list(setNames(DT$values, DT$varnames)),
glue("{a} + {b} is equal to 3")
)
#1 + 2 is equal to 3