我有一些data.tables包含文件名作为var命名fn.我想拆分基本名称和扩展名:
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)]
Run Code Online (Sandbox Code Playgroud)
所以这一切都很好,我的问题很小:我可以使用更像这样的表达式吗?
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 "."
Run Code Online (Sandbox Code Playgroud)
也就是说,我想换list()了.(),作为一个可以做里面`[.data.table`.
我quote/ eval的东西在下面试图在data.table FAQ 1.6建议.
已经修复了
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
Run Code Online (Sandbox Code Playgroud)