在引用的表达式中使用data.table的。()快捷方式

问题描述 投票:8回答:1

我有一些data.tables包含文件名作为名为fn的var。我想拆分基本名称和扩展名:

library(data.table)
library(tools)

DT1 = data.table(fn = c("gah.csv", "egad.csv"))
DT2 = data.table(fn = c("gah.xlsx", "egad.xlsx"))
DT3 = data.table(fn = c("boo.txt", "ya.foo"))

do_split_fn = quote(c("name", "ext") := list(file_path_sans_ext(fn), file_ext(fn)))

DT1[, eval(do_split_fn)]
DT2[, eval(do_split_fn)]
DT3[, eval(do_split_fn)]

所以这一切都很好,我的问题很小:我可以使用更像这样的表达式吗?

do_split_fn_dot = quote(c("name", "ext") := .(file_path_sans_ext(fn), file_ext(fn)))
DT1[, eval(do_split_fn_dot)]
# Error in eval(expr, envir, enclos) : could not find function "."

也就是说,我正在尝试将list()换成.(),就像在`[.data.table`中可以做的那样。

我的quote / eval的东西是试图跟随recommendations in the data.table FAQ 1.6

r data.table eval
1个回答
3
投票

已经修好了

library(data.table)
library(tools)

DT1 = data.table(fn = c("gah.csv", "egad.csv"))

do_split_fn_dot = quote(c("name", "ext") := .(file_path_sans_ext(fn), file_ext(fn)))
DT1[, eval(do_split_fn_dot)]
DT1
#         fn   name    ext
#1:  gah.csv    gah    csv
#2: egad.csv   egad    csv
© www.soinside.com 2019 - 2024. All rights reserved.