При каких обстоятельствах функция readRDS()
в R пытается загрузить пакеты/пространства имен? Я был удивлен увидеть следующее в свежем R сессии:readRDS() загружает дополнительные пакеты
> loadedNamespaces()
[1] "base" "datasets" "graphics" "grDevices" "methods" "stats"
[7] "tools" "utils"
> x <- readRDS('../../../../data/models/my_model.rds')
There were 19 warnings (use warnings() to see them)
> loadedNamespaces()
[1] "base" "class" "colorspace" "data.table"
[5] "datasets" "dichromat" "e1071" "earth"
[9] "evaluate" "fields" "formatR" "gbm"
[13] "ggthemes" "graphics" "grDevices" "grid"
[17] "Iso" "knitr" "labeling" "lattice"
[21] "lubridate" "MASS" "methods" "munsell"
[25] "plotmo" "plyr" "proto" "quantreg"
[29] "randomForest" "RColorBrewer" "reshape2" "rJava"
[33] "scales" "spam" "SparseM" "splines"
[37] "stats" "stringr" "survival" "tools"
[41] "utils" "wra" "wra.ops" "xlsx"
[45] "xlsxjars" "xts" "zoo"
Если какой-либо из этих новых пакетов не доступны, то readRDS()
терпит неудачу.
В 19 предупреждений упомянуты:
> warnings()
Warning messages:
1: replacing previous import ‘hour’ when loading ‘data.table’
2: replacing previous import ‘last’ when loading ‘data.table’
3: replacing previous import ‘mday’ when loading ‘data.table’
4: replacing previous import ‘month’ when loading ‘data.table’
5: replacing previous import ‘quarter’ when loading ‘data.table’
6: replacing previous import ‘wday’ when loading ‘data.table’
7: replacing previous import ‘week’ when loading ‘data.table’
8: replacing previous import ‘yday’ when loading ‘data.table’
9: replacing previous import ‘year’ when loading ‘data.table’
10: replacing previous import ‘here’ when loading ‘plyr’
11: replacing previous import ‘hour’ when loading ‘data.table’
12: replacing previous import ‘last’ when loading ‘data.table’
13: replacing previous import ‘mday’ when loading ‘data.table’
14: replacing previous import ‘month’ when loading ‘data.table’
15: replacing previous import ‘quarter’ when loading ‘data.table’
16: replacing previous import ‘wday’ when loading ‘data.table’
17: replacing previous import ‘week’ when loading ‘data.table’
18: replacing previous import ‘yday’ when loading ‘data.table’
19: replacing previous import ‘year’ when loading ‘data.table’
Таким образом, очевидно, что это что-то вроде lubridate
, а затем data.table
загрузки, порождая конфликты пространства имен, как она идет.
FWIW, unserialize()
дает те же результаты.
То, что я действительно хочу, - это загрузить эти объекты, не загружая все, что человек, который их сохранил, казалось, загрузился в то время, и это похоже на то, как он выглядит.
Update: здесь классы в объекте x
:
> classes <- function(x) {
cl <- c()
for(i in x) {
cl <- c(cl, if(is.list(i)) c(class(i), classes(i)) else class(i))
}
cl
}
> unique(classes(x))
[1] "list" "numeric" "rq"
[4] "terms" "formula" "call"
[7] "character" "smooth.spline" "integer"
[10] "smooth.spline.fit"
qr
происходит от quantreg
пакета, все остальные из base
или stats
.
Я предполагаю, что объекты, которые загружены в для классов, которые провоцируют этот каскад пакетов-загрузка ... Что такое класс '(х)' ?? –
Я сейчас не работаю, но когда я осмотрел «класс», я не смог найти ничего интересного. Просто 'число и прочее. Я проверю снова утром. –
'x' представляется сохраненной моделью (если имя файла релевантно). Как было создано 'x'? – mnel