无法在R中下载.tar

问题描述 投票:-1回答:1

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

我已经研究了几个在R中下载的函数,几乎所有这些函数看起来都有效,但是当我尝试解压缩它(手动,检查出错了)时,我收到一条消息:“存档已损坏”。

我已经尝试使用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,我曾经收到错误:

curl_download出错(data,destfile = vncZipPath,quiet = FALSE,mode =“w”):HTTP错误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让它发挥作用!我曾尝试过很多在网上找到的建议,但都没有正常工作。这是完美的代码,感谢@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 download tar
1个回答
0
投票

这对我有用 - 将这四个函数剪切并粘贴到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" 
© www.soinside.com 2019 - 2024. All rights reserved.