我需要从外部加载许多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"))
但这似乎不起作用。
答案 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;
}
}
}
Filter
个data.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
时也要格外小心。