Загрузите несколько файлов в Google Cloud из RStudio - PullRequest
0 голосов
/ 06 мая 2020

Я создаю несколько файлов html, используя комбинацию R и R. Загрузить несколько файлов с индивидуальной идентификацией в AWS s3 легко с помощью команды for l oop и put object. Вот пример:

for (i in 1:nrow(Data)){
  rmarkdown::render(input = "report.Rmd",
                    output_format = "html_document",
                    output_file = paste("output/report_", i, ".html", sep =''))}
library(aws.s3)
Sys.setenv(AWS_ACCESS_KEY_ID = "XXXX",
           AWS_SECRET_ACCESS_KEY = "YYYYY",
           AWS_DEFAULT_REGION = "ZZZZ")

# put_object to upload to AWS
for (i in 1:nrow(Data)){
  put_object(file = paste("/Users/me/output/report_", i, ".html", sep = ''),
             object = paste("report_", i, ".html", sep = ''), bucket = "mybucket")}

Я пытаюсь понять, как сделать то же самое с Google Cloud Storage.

library(googleCloudStorageR)
library(googleAuthR)


Sys.setenv("GCS_DEFAULT_BUCKET" = "reports",
           "GCS_AUTH_FILE" = "file/path/to.json")

Я могу без проблем загрузить один вывод:

gcs_upload(file = "output/report_1.html", bucket = "reports")

Когда я пытаюсь загрузить несколько файлов с индивидуальными именами с помощью al oop, это не удается.

for (i in 1:nrow(Data)){
  gcs_upload(file = paste("output/report_", i, ".html", sep = ""), bucket = "reports")
}

Этот код будет записывать первый html вывод, иногда второй и никогда не полный набор.

Любая помощь приветствуется.

ОБНОВЛЕНИЕ: я отказался от этой попытки. Обходной путь - использовать для l oop для загрузки в AMZN и запланировать повторяющуюся передачу в GCS с помощью команд GCS. Другие обходные пути используют интерфейс командной строки, но я не хочу использовать go таким образом. Я подозреваю, что отсутствие ответа на этот поток указывает на небольшую потребность в создании загрузки из R в GCS. Отдельно хочу поблагодарить того, кто написал пакет R aws s3. Красиво работает!

1 Ответ

0 голосов
/ 15 июня 2020

Я думаю, это, вероятно, произошло из-за того, что в l oop не использовался аргумент name, который по умолчанию является производным от имени объекта R, поэтому при зацикливании возникает ошибка.

Это могло бы наверное работали:

for (i in 1:nrow(Data)){
  the_file_name <- paste("output/report_", i, ".html", sep = "")
  gcs_upload(the_file_name, name = the_file_name, bucket = "reports")
}
...