我编写的代码构建了一个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:
(我通过删除一些文件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会话中,如果它有效,那很好,如果没有,那么编辑你的问题只包括这四行并显示错误信息:
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"