我需要从外部加载许多 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'
Run Code Online (Sandbox Code Playgroud)
结果都是一样的。有没有更优雅的方法来做到这一点?
ps 一位朋友建议使用do.call:
do.call(setDT, list("A", "B", "C"))
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用。
你可以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))))
Run Code Online (Sandbox Code Playgroud)
您也可以替换is.data.frame为is.list或更复杂的东西,但我认为is.data.frame涵盖了您的用例。
您也可以使用get,也可以更小心指定envir在ls/ eval/ get。
| 归档时间: |
|
| 查看次数: |
242 次 |
| 最近记录: |