чтение необработанных данных в R для сохранения в виде файла .RData с помощью dropbox api

Выработав систему авторизации подписи oauth, для dropbox я захотел загрузить файл .RData, который я сохранил там, используя API, и httr ' GET ,

Запрос был достаточно успешным и возвращается с данными, но он находится в необработанном формате и задавался вопросом, как я могу снова преобразовать его в файл RData на моем локальном диске.

Это то, что я сделал до сих пор: ...

require(httr)
db.file.name <- "test.RData"
db.app <- oauth_app("db",key="xxxxx", secret="xxxxxxx")
db.sig <- sign_oauth1.0(db.app, token="xxxxxxx", token_secret="xxxxxx")

response <- GET(url=paste0("https://api-content.dropbox.com/1/files/dropbox/",db.file.name),config=c(db.sig,add_headers(Accept="x-dropbox-metadata")))

str(response)
List of 8
 $ url        : chr "https://api-content.dropbox.com/1/files/dropbox/test.RData"
 $ handle     :List of 2
  ..$ handle:Formal class 'CURLHandle' [package "RCurl"] with 1 slots
  .. .. [email protected] ref: 
  ..$ url   :List of 8
  .. ..$ scheme  : chr "https"
  .. ..$ hostname: chr "api-content.dropbox.com"
  .. ..$ port    : NULL
  .. ..$ path    : chr ""
  .. ..$ query   : NULL
  .. ..$ params  : NULL
  .. ..$ username: NULL
  .. ..$ password: NULL
  .. ..- attr(*, "class")= chr "url"
  ..- attr(*, "class")= chr "handle"
 $ status_code: num 200
 $ headers    :List of 14
  ..$ server                       : chr "nginx/1.2.6"
  ..$ date                         : chr "Tue, 29 Jan 2013 10:18:58 GMT"
  ..$ content-type                 : chr "application/octet-stream"
  ..$ content-length               : chr "1142953"
  ..$ connection                   : chr "keep-alive"
  ..$ access-control-expose-headers: chr "X-Dropbox-Metadata, Accept-Ranges, Content-Range"
  ..$ accept-ranges                : chr "bytes"
  ..$ x-dropbox-metadata           : chr "{\"revision\": 8398, \"rev\": \"20ce0573b0e8\", \"thumb_exists\": false, \"bytes\": 1142953, \"modified\": \"Thu, 24 Jan 2013 2"| __truncated__
  ..$ etag                         : chr "8398n"
  ..$ pragma                       : chr "public"
  ..$ cache-control                : chr "max-age=0"
  ..$ access-control-allow-origin  : chr "*"
  ..$ status                       : chr "200"
  ..$ statusmessage                : chr "OK"
  ..- attr(*, "class")= chr [1:2] "insensitive" "list"
 $ cookies    : list()
 $ content    : raw [1:1142953] 1f 8b 08 00 ...
 $ times      : Named num [1:6] 0 0.4 0.518 0.879 1.898 ...
  ..- attr(*, "names")= chr [1:6] "redirect" "namelookup" "connect" "pretransfer" ...
 $ config     :List of 1
  ..$ httpheader: Named chr [1:2] "x-dropbox-metadata" "OAuth oauth_consumer_key=\"xxxxxx\", oauth_nonce=\"xxxxxxxx\", oauth_signature=\"xxxxxxxxxxxxxx\", o"| __truncated__
  .. ..- attr(*, "names")= chr [1:2] "Accept" "Authorization"
  ..- attr(*, "class")= chr "config"
 - attr(*, "class")= chr "response"


raw.content.of.file <- content(response)
head(raw.content.of.file)
[1] 1f 8b 08 00 00 00

в основном я хочу каким-то образом сохранить объект raw.content.of.file в файл с именем download.RData , который должен быть идентичен test.RData code> или не удалось, по крайней мере, иметь возможность загружать объекты, находящиеся в test.RData , в мою глобальную среду.

5
nl ja de

2 ответы

Вы можете использовать writeBin для записи содержимого двоичного ответа в файл Rda . Вот полный рабочий пример:

library(httr)
test <- 1:10
save(test, file="~/Dropbox/test.Rda")
response <- GET(url="https://dl.dropbox.com/s/9rjbjwqxid7yj53/test.Rda?dl=1")
writeBin(response$content, "test2.Rda")
rm(test)
load("test2.Rda")
test
 [1]  1  2  3  4  5  6  7  8  9 10

И есть еще более простой способ, если вы не хотите сохранять свои двоичные данные в файл. Вы можете просто сделать прямо:

rm(test)
load(rawConnection(response$content))
test
 [1]  1  2  3  4  5  6  7  8  9 10
5
добавлено
гений! Спасибо!
добавлено автор h.l.m, источник
хорошо, спасибо! Это полезно, хотелось бы, чтобы я мог дать вам больше очков.
добавлено автор h.l.m, источник
@juba: почему нужно добавить строку «...? dl = 1» в строку?
добавлено автор Paulo E. Cardoso, источник
Фактически вы можете даже загружать данные напрямую, не создавая файл Rda . См. Отредактированный ответ.
добавлено автор juba, источник
Добро пожаловать, рад, что это помогает, и сегодня я узнал что-то новое :)
добавлено автор juba, источник

Вы можете использовать writeBin для записи содержимого двоичного ответа в файл Rda . Вот полный рабочий пример:

library(httr)
test <- 1:10
save(test, file="~/Dropbox/test.Rda")
response <- GET(url="https://dl.dropbox.com/s/9rjbjwqxid7yj53/test.Rda?dl=1")
writeBin(response$content, "test2.Rda")
rm(test)
load("test2.Rda")
test
 [1]  1  2  3  4  5  6  7  8  9 10

И есть еще более простой способ, если вы не хотите сохранять свои двоичные данные в файл. Вы можете просто сделать прямо:

rm(test)
load(rawConnection(response$content))
test
 [1]  1  2  3  4  5  6  7  8  9 10
5
добавлено
гений! Спасибо!
добавлено автор h.l.m, источник
хорошо, спасибо! Это полезно, хотелось бы, чтобы я мог дать вам больше очков.
добавлено автор h.l.m, источник
@juba: почему нужно добавить строку «...? dl = 1» в строку?
добавлено автор Paulo E. Cardoso, источник
Фактически вы можете даже загружать данные напрямую, не создавая файл Rda . См. Отредактированный ответ.
добавлено автор juba, источник
Добро пожаловать, рад, что это помогает, и сегодня я узнал что-то новое :)
добавлено автор juba, источник