我试图弄清楚是否有一个好的方法在j
中使用glue()
的data.table:
library(data.table)
library(glue)
data(iris)
dt.iris <- data.table(iris)
dt.iris[, myText := glue('The species is {Species} with sepal length of {Sepal.Length}')]
# Error in eval(parse(text = text, keep.source = FALSE), envir) :
# object 'Species' not found
字符串
我可以使用它,如果我指示.envir = .SD
:
dt.iris[, myText := glue('The species is {Species} with sepal length of {Sepal.Length}', .envir = .SD)]
# works OK
型
但是我想知道我是否能找到一些方法,而不是每次都添加这个。也许是这样的:
glue1 <- function(...) glue(..., .envir = ???)
型
4条答案
按热度按时间8wigbo561#
为什么不简单地使用
sprintf
,字符串
或者
paste
,这是相当慢,虽然。型
基准测试
型
型
型
8dtrkrch2#
你可以做
字符串
测试,我们有:
型
创建于2023-11-11使用reprex v2.0.2
iyfamqjs3#
我的方法是简单地使用
glue_data
:字符串
我认为这是由于
glue
将所有内容都视为一个字符串"The species is {Species} with sepal length of {Sepal.Length}"
的方式,而不是像R中通常那样将字符串和变量(如paste
或sprintf
)分开,因此data.table
将正常工作。另一种方法是使用元编程:
型
cyej8jka4#
使用
transform.data.table
(来自data.table)给出所有data.table解决方案,或者使用mutate
(来自dcloud)或fmutate
(来自collapse)代替[.data.table
。如果我们提供data.table输入,我们仍然会得到一个data.table结果。字符串