我们可以一次对多个对象设置DT吗?

时间:2019-03-10 07:25:40

标签: r data.table

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

是否可以一次全部设置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.s。一位朋友建议使用do.call

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

但这似乎不起作用。

1 个答案:

答案 0 :(得分:3)

您可以在环境中public class Hello implements RequestHandler<Object, String> { private DomainLogic domain; private ErrorHandling errHandling; Hello(DomainLogic domain, ErrorHandling errHandling) { this.domain = domain; this.errHandling = errHandling; } @Override public String handleRequest(Object input, Context context) { try { return domain.sayHello(input); } catch (Exception e) { errHandling.handle(e); throw e; } } } Filterdata.frame应用于那些环境:

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.data.frame,但我认为is.list涵盖了您的用例。

您还可以使用is.data.frame,并且在get / envir / ls中指定eval时也要格外小心。