为什么我的非交互式R会话可以调度data.table,就像它是data.frame一样?

Dhs*_*kdh 4 r dataframe data.table

我有一个data.table对象,我想做一个简单的查找:

print(class(dt))
print(colnames(dt))
print(dt[region == "UK", ])
Run Code Online (Sandbox Code Playgroud)

在我的交互式R会话中,这段代码完全符合它的要求.

[1] "data.table" "data.frame"
[1] "region"            "site"              "visit"            
[4] "connectionfailure" "dnserror"          "http404"          
# ... output ...
Run Code Online (Sandbox Code Playgroud)

在非交互式脚本会话中,我收到一个令人困惑的错误:

[1] "data.table" "data.frame"
[1] "region"            "site"              "visit"            
[4] "connectionfailure" "dnserror"          "http404"          
Error in `[.data.frame`(x, i, j) : object 'region' not found
Run Code Online (Sandbox Code Playgroud)

看起来R调度dt[....[.data.frame而不是[.data.table].有什么想法为什么?

Bro*_*ieG 5

很可能您没有library(data.table)在批处理执行中设置.可能是基于您的用户配置文件自动加载data.table,但不是批处理exec.另外,只是b/c有一个类data.table,并不意味着包加载:

library(data.table)
dt <- data.table(a=1:3)
detach("package:data.table", unload=TRUE)
class(dt)
# [1] "data.table" "data.frame"
setkey(dt, a)
# Error: could not find function "setkey"
library(data.table)
setkey(dt, a)
#works
Run Code Online (Sandbox Code Playgroud)