R 我们可以同时在多个对象上设置dt吗?

R 我们可以同时在多个对象上设置dt吗?,r,data.table,R,Data.table,我需要从外部加载许多rds文件,为了使事情进行得更顺利,我倾向于在对象上设置DT 有可能一次全部设置吗?我试过: lapply(ls(), setDT) lapply(list(ls()), setDT) for(i in ls()) setDT(i) #Error in FUN(X[[i]], ...) : # Argument 'x' to 'setDT' should be a 'list', 'data.frame' or 'data.table' 结果都是一样的。还有更优雅的方

我需要从外部加载许多rds文件,为了使事情进行得更顺利,我倾向于在对象上设置DT

有可能一次全部设置吗?我试过:

lapply(ls(), setDT)
lapply(list(ls()), setDT)
for(i in ls()) setDT(i)

#Error in FUN(X[[i]], ...) : 
#  Argument 'x' to 'setDT' should be a 'list', 'data.frame' or 'data.table'
结果都是一样的。还有更优雅的方式吗

p、 一位朋友建议使用
do.call

do.call(setDT, list("A", "B", "C"))

但这似乎不起作用。

您可以
过滤
数据。在环境中设置
s并将
setDT
应用于以下各项:

all_data_tables = Filter(function(x) is.data.frame(eval(as.name(x))), ls())
lapply(all_data_tables, function(x) setDT(eval(as.name(x))))
您还可以用
is.list
或更复杂的内容替换
is.data.frame
,但我认为
is.data.frame
涵盖了您的用例


您还可以使用
get
,并且在
ls
/
eval
/
get

中指定
envir
时也可以更加小心,谢谢Michael。现在我知道这是关于值输入的类。@Grec001不要被错误消息吓倒——它们是您的朋友!“setDT”的参数“x”应该是“list”、“data.frame”或“data.table”