在 R 中无法下载 .tar

Trouble downloading .tar in R

我编写了构建 URL 从某个网站下载文件的代码。 当我将其粘贴到浏览器中时,它会立即下载必要的文件,作为 tar 文件夹 (.tar),然后我可以轻松解压缩。 我需要它在 R 中的代码中执行此操作。

我研究了几个在 R 中下载的函数,几乎所有函数似乎都有效,但是当我尝试解压缩它时(手动,检查有什么问题),我收到一条消息说:"The archive is corrupt".

我已经尝试使用 file.download、curl_download 和其他方法。

使用file.download,我得到错误:

H:\R\tempVNC.tar: Checksum error in H:\R\gdc_download_20180222_120441.tar. The file is corrupt

使用curl_download,有一次报错:

Error in curl_download(data, destfile = vncZipPath, quiet = FALSE, mode = "w") : HTTP error 500.

当我尝试解压缩文件时,我总是收到错误消息:

H:\VNC Files\vnc.tar.gz: The archive is corrupt

我尝试了很多选项,以至于我不记得所有的选项。但似乎没有任何效果。 (同样,我写的 URL 在粘贴到浏览器时确实可以完成这项工作。问题是从 R 发送它。)

如有任何建议,我将不胜感激。

提前致谢,

这是URL下载文件:

https://api.gdc.cancer.gov/data/10895295-0a9d-414b-a367-24d29f1bd898,696c51da-f166-4dbb-8ba2-e6ecc11a7ccd,6b4f0ea1-3884-45e4-994e-3ebc1c76c2a1,7c7ceb7e-25be-4056-bcea-3ef319d42342,2f22c96a-7b69-4e9c-96ac-be58fc2a79f1,3fcc165a-500b-4a2e-99d8-911448fe57d2,38d7d00a-594d-4bdc-a34c-660bfc195ff0,14a97b71-eb7c-4e3c-bdf6-dd310daa8337,c37cfb04-f560-4cc9-bcec-666300cc93d6,5c31c14c-6d61-4097-bef1-fd99aa1d9e3d,e02c3f8a-88fc-479a-9827-682c16581313,4e376dc4-d851-480e-a21c-bd30405a7274?related_files=false

(我通过删除一些文件 ID 来缩短它,这样它就不会太长...)

我的代码的相关部分是:

my_url <- "https://api.gdc.cancer.gov/data/10895295-0a9d-414b-a367-24d29f1bd898,696c51da-f166-4dbb-8ba2-e6ecc11a7ccd,6b4f0ea1-3884-45e4-994e-3ebc1c76c2a1,7c7ceb7e-25be-4056-bcea-3ef319d42342,2f22c96a-7b69-4e9c-96ac-be58fc2a79f1,3fcc165a-500b-4a2e-99d8-911448fe57d2,38d7d00a-594d-4bdc-a34c-660bfc195ff0,14a97b71-eb7c-4e3c-bdf6-dd310daa8337,c37cfb04-f560-4cc9-bcec-666300cc93d6,5c31c14c-6d61-4097-bef1-fd99aa1d9e3d,e02c3f8a-88fc-479a-9827-682c16581313,4e376dc4-d851-480e-a21c-bd30405a7274?related_files=false"
vncTar <- paste(getwd(), "vnc.tar", sep = "//") # Create destination file
a <- curl_download(my_url, destfile = vncTar, quiet = TRUE, mode = "w")
download.file(my_url, destfile = vncTar, method = 'libcurl') #tried several "methods", including default...
dir.create("Extracted Files")
untar(vncTar, "Extracted Files")

# I also tried the following, using Rcurl package:
f = CFILE(vncTar, mode="wb")
curlPerform(url = my_url, writedata = f@ref)
close(f)
#The error this gave is:
#Error in function (type, msg, asError = TRUE)  : 
#error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake 
#failure

更新: 感谢@Spacedman 让它工作!我尝试了很多在网上找到的建议,但 none 工作正常。这是完美运行的代码,感谢@Spacedman:

my_url <- "https://api.gdc.cancer.gov/data/10895295-0a9d-414b-a367-24d29f1bd898,696c51da-f166-4dbb-8ba2-e6ecc11a7ccd,6b4f0ea1-3884-45e4-994e-3ebc1c76c2a1,7c7ceb7e-25be-4056-bcea-3ef319d42342,2f22c96a-7b69-4e9c-96ac-be58fc2a79f1,3fcc165a-500b-4a2e-99d8-911448fe57d2,38d7d00a-594d-4bdc-a34c-660bfc195ff0,14a97b71-eb7c-4e3c-bdf6-dd310daa8337,c37cfb04-f560-4cc9-bcec-666300cc93d6,5c31c14c-6d61-4097-bef1-fd99aa1d9e3d,e02c3f8a-88fc-479a-9827-682c16581313,4e376dc4-d851-480e-a21c-bd30405a7274?related_files=false"
vncTar <- paste(getwd(), "vnc.tar", sep = "//") # Create destination file name
download.file(my_url, vncTar, mode = "wb") 
files <- untar(vncTar, compress=TRUE, list=TRUE) # Saves list of file names
untar(vncTar, compress=TRUE) # Extracts the files

这对我有用 - 将这四个函数剪切并粘贴到 R 会话中,如果它起作用,很好,如果它不起作用,那么编辑你的问题以仅包含这四行 并显示错误信息:

my_url <- "https://api.gdc.cancer.gov/data/10895295-0a9d-414b-a367-24d29f1bd898,696c51da-f166-4dbb-8ba2-e6ecc11a7ccd,6b4f0ea1-3884-45e4-994e-3ebc1c76c2a1,7c7ceb7e-25be-4056-bcea-3ef319d42342,2f22c96a-7b69-4e9c-96ac-be58fc2a79f1,3fcc165a-500b-4a2e-99d8-911448fe57d2,38d7d00a-594d-4bdc-a34c-660bfc195ff0,14a97b71-eb7c-4e3c-bdf6-dd310daa8337,c37cfb04-f560-4cc9-bcec-666300cc93d6,5c31c14c-6d61-4097-bef1-fd99aa1d9e3d,e02c3f8a-88fc-479a-9827-682c16581313,4e376dc4-d851-480e-a21c-bd30405a7274?related_files=false"

d = tempfile()
download.file(my_url, d, mode="wb")
untar(d, compress=TRUE, list=TRUE)
# [1] "MANIFEST.txt" 

这是关于在 R 中下载和解压 tar 文件的最简单方法,您的问题应该是这样的。

如果这可行,您应该有一个文件存在并且这么大(尽管我看到文件大小有一些变化...):

file.exists(d)
## [1] TRUE
file.size(d)
## [1] 32654

解压文件到当前目录,取出list=TRUE:

有什么吗?

file.exists("MANIFEST.txt")
## [1] FALSE

没有。下载并 untar:

d = tempfile()
download.file(my_url, d, mode="wb")
untar(d, compress=TRUE)

似乎什么都没有发生,但是:

file.exists("MANIFEST.txt")
## [1] TRUE

一个文件出现。所有的东西都出现了:

> list.files(".")
 [1] "10895295-0a9d-414b-a367-24d29f1bd898"
 [2] "14a97b71-eb7c-4e3c-bdf6-dd310daa8337"
 [3] "2f22c96a-7b69-4e9c-96ac-be58fc2a79f1"
 [4] "38d7d00a-594d-4bdc-a34c-660bfc195ff0"
 [5] "3fcc165a-500b-4a2e-99d8-911448fe57d2"
 [6] "4e376dc4-d851-480e-a21c-bd30405a7274"
 [7] "5c31c14c-6d61-4097-bef1-fd99aa1d9e3d"
 [8] "696c51da-f166-4dbb-8ba2-e6ecc11a7ccd"
 [9] "6b4f0ea1-3884-45e4-994e-3ebc1c76c2a1"
[10] "7c7ceb7e-25be-4056-bcea-3ef319d42342"
[11] "c37cfb04-f560-4cc9-bcec-666300cc93d6"
[12] "e02c3f8a-88fc-479a-9827-682c16581313"
[13] "MANIFEST.txt"