#r #purrr
Вопрос:
Я следую инструкциям в этом посте, чтобы загрузить 2 csv-файла с моего Google диска на свой компьютер. Вот приведенный код —
library(googledrive)
library(purrr)
## store the URL you have
folder_url <- "https://drive.google.com/drive/folders/0B7tJg2i5HAo2c0VzVFVhLUdQcnM"
## identify this folder on Drive
## let googledrive know this is a file ID or URL, as opposed to file name
folder <- drive_get(as_id(folder_url))
## identify the csv files in that folder
csv_files <- drive_ls(folder, type = "csv")
## download them
walk(csv_files$id, ~ drive_download(as_id(.x)))
Приведенные выше инструкции загружают csv-файлы в мою папку «документы». Я пытаюсь загрузить файлы в определенную папку на своем ноутбуке, используя небольшое изменение последнего бита кода
walk(csv_files$id, ~ drive_download(as_id(.x),
path = "../Desktop/data_folder/,
overwrite = TRUE))
К сожалению, при этом сохраняется один файл .xlsx, который не содержит никаких данных и не может быть открыт. Как исправить код для сохранения обоих файлов в определенной папке?
Ответ №1:
Проблема в том, что path
параметру требуется полное имя файла, а не просто путь к каталогу. Поэтому по умолчанию он определяет имя файла с помощью методов goodledrive и использует его для создания файла на вашем компьютере в текущем рабочем каталоге. Но если вы не хотите такого поведения по умолчанию, вам также следует указать имя файла. Таким образом, по сути, есть два варианта:
- Установите свой рабочий каталог в папку, в которую вы хотите загрузить файлы, прежде чем запускать предоставленный вами код. (и тогда, скорее всего, будет хорошей идеей изменить его обратно)
- Перепишите сценарий так, чтобы этот
path
параметр создавался с использованием имени файла googledrive. Что-то вроде этого:
path <- "~/Documents/tmp/data_folder/"
for (i in seq_along(csv_files$name)) {
drive_download(
as_id(csv_files$id[[i]]),
path = file.path(path, csv_files$name[[i]]),
overwrite = TRUE
)
}
Или, если вы предпочитаете использовать walk
:
csv_files %>%
split(csv_files$id) %>%
walk(~drive_download(.$id, path = file.path(path, .$name), overwrite = TRUE))