Разархивируйте объект R прямо из среды - PullRequest
2 голосов
/ 26 мая 2020

У меня есть объект R (класс: 'raw'), загруженный в среду. Это в двоичном формате. Я знаю, что этот (заархивированный) объект R содержит единственный файл (например, файл pdf или txt).

Назовем этот объект: 'zipped_r_object'.

У меня нет сохраненного исходного файла на моем компьютере. Этот объект извлекается из соединения с базой данных.

Вот почему я хочу распаковать двоичный / необработанный «zipped_r_object» непосредственно из R-среды и сохранить разархивированное содержимое в новом объекте («unzipped_object»). Таким образом, я могу продолжить обработку файла.

Как мне сделать это в R? Я знаю, как разархивировать из сохраненного zip-архива, сохраненного на моем компьютере. Но я не могу так показаться исключительно в среде R.

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 26 мая 2020

Один из подходов - передать writeBin объект в файл.

writeBin(zipped_r_object, "temp.zip")

Вы также можете записать его во временный файл, а затем использовать unzip с list = TRUE, чтобы увидеть имя файла, содержащегося в архиве.

temp <- tempfile()
writeBin(zipped_r_object, temp)
unzip(temp, list = TRUE)

Затем вы можете извлечь его во временный каталог:

temp2 <- tempdir()
unzip(temp, temp2)
list.files(temp2)
1 голос
/ 26 мая 2020

Однажды я столкнулся с подобной проблемой. После запроса API я получил заархивированный двоичный файл, который мне пришлось проанализировать следующим образом:

response.from.API.object
object.as.string.b64.binary = response.from.API.object$content
object.as.string.b64.dec = jsonlite::base64_dec(object.as.string.b64.binary)
base::writeBin(object.as.string.b64.dec, destination.fpath)

Я думаю, ваш zipped_r_object будет эквивалентен моему object.as.string.b64.binary

In В моем случае мне пришлось записать объект на диск, а затем работать оттуда.

...