R如何使用R从谷歌驱动器读取文件
Posted
技术标签:
【中文标题】R如何使用R从谷歌驱动器读取文件【英文标题】:R How to read a file from google drive using R 【发布时间】:2018-05-30 19:26:29 【问题描述】:我想在 R 中读取来自 google drive 的数据集作为 screenshot 表示。
都没有
url <- "https://drive.google.com/file/d/1AiZda_1-2nwrxI8fLD0Y6e5rTg7aocv0"
temp <- tempfile()
download.file(url, temp)
bank <- read.table(unz(temp, "bank-additional.csv"))
unlink(temp)
也没有
library(RCurl)
bank_url <- dowload.file(url, "bank-additional.csv", method = 'curl')
有效。
我已经为此工作了好几个小时。任何提示或解决方案将不胜感激。
【问题讨论】:
使用 tidyverse 中的googledrive
库怎么样? googledrive.tidyverse.org
【参考方案1】:
试试
temp <- tempfile(fileext = ".zip")
download.file("https://drive.google.com/uc?authuser=0&id=1AiZda_1-2nwrxI8fLD0Y6e5rTg7aocv0&export=download",
temp)
out <- unzip(temp, exdir = tempdir())
bank <- read.csv(out[14], sep = ";")
str(bank)
# 'data.frame': 4119 obs. of 21 variables:
# $ age : int 30 39 25 38 47 32 32 41 31 35 ...
# $ job : Factor w/ 12 levels "admin.","blue-collar",..: 2 8 8 8 1 8 1 3 8 2 ...
# $ marital : Factor w/ 4 levels "divorced","married",..: 2 3 2 2 2 3 3 2 1 2 ...
# <snip>
该 URL 应与您使用浏览器下载文件时使用的 URL 相对应。
正如@Mako212 指出的那样,您还可以使用googledrive
包,将drive_download
替换为download.file
:
library(googledrive)
temp <- tempfile(fileext = ".zip")
dl <- drive_download(
as_id("1AiZda_1-2nwrxI8fLD0Y6e5rTg7aocv0"), path = temp, overwrite = TRUE)
out <- unzip(temp, exdir = tempdir())
bank <- read.csv(out[14], sep = ";")
【讨论】:
感谢您的回复。第二种方法效果很好。但是对于第一种方法,当我用完 googledrive 将要求使用您的 google 帐户进行身份验证,因此如果您不进行身份验证或无法进行身份验证,此答案将不起作用。 当我尝试这个时,我收到了警告error 1 in extracting from zip file
和 out=NULL
。此外,下载的文件太小而不正确,这可能会导致问题。谷歌驱动器的链接虽然在 R 之外工作。【参考方案2】:
google drive share 链接不是直接文件链接,所以1. download.file
2. RCurl
first method in accepted answer
只下载显示文件的网页,而不是文件本身。你可以编辑下载的文件,看看它是一个html文件。
您可以使用this 找到指向文件的实际直接链接。通过直接链接,所有常规下载方法都可以使用。
有关获取直接链接或下载的非常详细的讨论,请参阅this question。
Google drive api 需要客户端登录,所以 googledrive 包还会要求您在尚未登录的情况下登录 google。
【讨论】:
【参考方案3】:您可以使用googledrive
package 完成所有这些操作。
这是一个两步过程,您首先找到文件夹以获取其 ID,然后查询以该文件夹为父文件夹的所有文件。
dir = drive_find(pattern='my_folder', type='folder')
query = paste('"', dir$id, '"', ' in parents', sep='')
drive_find(q=query)
请注意,如果您在云端硬盘的不同部分有多个名为“my_folder”的文件夹,drive_find
可能会返回多个文件夹,因此您可能需要将查询修改为更具体(即通过父文件夹搜索)。我建议检查一下,只需执行nrow(dir) == 1
就只返回一个文件夹。您还可以更改查询以使用正则表达式来指示它应该只返回文件夹名称的完全匹配。在这种情况下,请将drive_find
命令替换为
drive_find(pattern='^my_folder$', type='folder')
您可以在the documentation 找到有关drive_find
参数的更多详细信息。
【讨论】:
以上是关于R如何使用R从谷歌驱动器读取文件的主要内容,如果未能解决你的问题,请参考以下文章