R 语言中,不管是安装包,还是下载数据,很多时候都会用到download.file
这个函数。如果你在安装包或者下载数据过程中出现中断,或者异常,想要判断是远程源服务器的问题,还是自身服务器的问题,还是网络故障,甚至于你想要换一种方法去继续你的下载,了解一下download.file
还是很有帮助的。
上面的链接是关于download.file
函数非常详细的一个文档,个人非常关注就是它关于method
参数设置和理解。
![a2de359d-bd31-49a7-a6a6-5416adf0b973.png](https://i-blog.csdnimg.cn/blog_migrate/e54556f11a836447168d43b2344c33a0.png)
BT娃小提示
If method="auto"
is chosen (the default), the behavior depends on the platform:
On a Unix-alike method "libcurl" is used except "internal" for file:// URLs, where "libcurl" uses the library of that name (https://curl.se/libcurl/).
On Windows the "wininet" method is used apart from for ftps:// URLs where "libcurl" is tried. The "wininet" method uses the WinINet functions (part of the OS).
Support for method "libcurl" is optional on Windows: use capabilities("libcurl") to see if it is supported on your build. It uses an external library of that name (https://curl.se/libcurl/) against which R can be compiled.
关于 download.file 的几点理解和值得注意的地方:
download.file 是来源于 R 自带的 utils 包的一个函数,使用 packageVersion("utils") 可以查看该包的版本。
![8e8b6f17-5470-4dd2-989b-34ecc0b08781.jpg](https://i-blog.csdnimg.cn/blog_migrate/0f2387ed451d99348d85ab56bede6a22.jpeg)
![2fb87548-a3d4-40c4-aab2-8b40a58888ad.jpg](https://i-blog.csdnimg.cn/blog_migrate/e94ef9fa1fe5aa0c69a6d7efdbb7de4e.jpeg)
在类 Unix 系统中,默认使用 "libcurl" 的方法,而对 file:// 的链接会使用 "internal" 的下载方法。
![2fb87548-a3d4-40c4-aab2-8b40a58888ad.jpg](https://i-blog.csdnimg.cn/blog_migrate/e94ef9fa1fe5aa0c69a6d7efdbb7de4e.jpeg)
在 Windows 中,默认使用 "wininet" 的方法,对于 ftps:// 的资源会尝试使用 "libcurl" 的下载方法。
Method to be used for downloading files. Current download methods are "internal","wininet" (Windows only) "libcurl", "wget" and "curl", and there is a value "auto".
![8e8b6f17-5470-4dd2-989b-34ecc0b08781.jpg](https://i-blog.csdnimg.cn/blog_migrate/0f2387ed451d99348d85ab56bede6a22.jpeg)
![2fb87548-a3d4-40c4-aab2-8b40a58888ad.jpg](https://i-blog.csdnimg.cn/blog_migrate/e94ef9fa1fe5aa0c69a6d7efdbb7de4e.jpeg)
注意 "libcurl" 和 "curl" 的区别,严格意义上,两者不是同一个东西。
![2fb87548-a3d4-40c4-aab2-8b40a58888ad.jpg](https://i-blog.csdnimg.cn/blog_migrate/e94ef9fa1fe5aa0c69a6d7efdbb7de4e.jpeg)
相同点:
curl 和 libcurl 都可以利用多种多样的协议来传输文件,包括 HTTP, HTTPS, FTP, FTPS, GOPHER, LDAP, DICT, TELNET and FILE 等。
![2fb87548-a3d4-40c4-aab2-8b40a58888ad.jpg](https://i-blog.csdnimg.cn/blog_migrate/e94ef9fa1fe5aa0c69a6d7efdbb7de4e.jpeg)
不同点:
curl 是命令行工具,可以通过 shell 或脚本来运行 curl。curl 底层所使用的库是 libcurl。
libcurl 是一个库,通常与别的程序绑定在一起使用,如命令行工具 curl 就是封装了 libcurl 库。所以我们也可以在你自己的程序或项目中使用 libcurl 以获得类似 curl 的强大功能。
The method can also be set through the option "d ownload.file.method" : see options() . A
可以使用 options(download.file.method = "libcurl") 的方式指定全局下载的方法。
参考:https://stackoverflow.com/a/63104633
![image.png ed644f51-fba3-43a3-8cd8-c88c9dc1dfa7.png](https://i-blog.csdnimg.cn/blog_migrate/bfed7947851ab2124be0436957e6b246.png)
![ab4394c5-2926-499f-929b-5d218820d2b5.jpg](https://i-blog.csdnimg.cn/blog_migrate/dccd436dbfb548705a76c75c557d5e4f.jpeg)
![028baf1e-2356-43d9-b682-5f96bfe847b1.jpg](https://i-blog.csdnimg.cn/blog_migrate/6493ecc6fc1abf817ec7736ed385de6e.jpeg)
![566fc473-ef64-4004-b11a-7dd5d84b67ba.jpg](https://i-blog.csdnimg.cn/blog_migrate/959e309f2d70422239d0682cd675d682.jpeg)
![215f43c3-37f2-4e63-b723-90c6173ac3c8.jpg](https://i-blog.csdnimg.cn/blog_migrate/fc07ac4741ea919106018dd882211633.jpeg)
![8c15c451-1836-4e93-a1fa-66431013224f.jpg](https://i-blog.csdnimg.cn/blog_migrate/dc6452bfbc40a23410ea6897d88da4cf.jpeg)
![d44a93d2-9ca1-48a4-838c-3e6f1bb771f8.jpg](https://i-blog.csdnimg.cn/blog_migrate/cf9594ead5a05942057860a516679b5c.jpeg)
本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。