Вот мой единственный снимок: если вы можете передавать только текстовые аргументы, а не двоичные структуры (например, найденные в моделях, сохраненных как файлы .rda
или .rds
), мне интересно, можете ли вы передать закодированное в base64 представление объекта :
mdl <- lm(mpg ~ disp + cyl, data=mtcars)
saveRDS(mdl, file="model.rds")
Это бинарный файл, который я упоминал ранее. Поскольку вы не можете прочитать это в Power BI, давайте закодируем его текстовым способом. Я использую base64enc
здесь, но, вероятно, есть другие способы, которые могут быть более эффективными, более компактными и т. Д. Я не делаю этого утверждения здесь.
library(base64enc)
writeLines(base64encode("model.rds"), con="model.rds.b64")
tf <- tempfile()
Этот tf
объект будет очищен обычным методом «очистки временного файла» для Power BI и / или вашей ОС. Следующая команда использует file=
, но ей также легко можно передать вектор character
(я полагаю, длины 1), если ваш код R получает этот объект другим методом:
base64decode(file="model.rds.b64", output=tf)
mdl2 <- readRDS(tf)
mdl
# Call:
# lm(formula = mpg ~ disp + cyl, data = mtcars)
# Coefficients:
# (Intercept) disp cyl
# 34.66099 -0.02058 -1.58728
identical(mdl, mdl2)
# [1] TRUE
И хотя это lm
, а не rf
, он довольно компактен:
file.info("model.rds")$size # same as "tf"
# [1] 2637
file.info("model.rds.b64")$size
# [1] 3518
(Не удивительно, что кодировка base64 вводит здесь увеличение на 33%, что ожидается .)