R markdown在使用download.file时无法打开URL

js5cn81o  于 2023-05-26  发布在  其他
关注(0)|答案(2)|浏览(182)
  • 请注意,此问题仅在Windows上发生。

我有以下代码,可以在普通脚本或控制台中正常运行:

tdir <- tempdir()

stateurl <- "https://www2.census.gov/geo/tiger/GENZ2018/shp/cb_2018_us_state_500k.zip"
if(file.exists(paste(tdir,"/cb_2018_us_state_500k.shp",sep=""))==F){
download.file(stateurl, destfile = file.path(tdir, "States.zip"))
unzip(file.path(tdir,"States.zip"),exdir=tdir)}

但是,当将相同的脚本放在一个块中并试图在Rmarkdown中编织HTML时,我得到了“无法打开URL连接”的警告。
我不知道为什么像下载文件这样简单的事情会在控制台中运行,而不是在RMarkdown中运行。

vulvrdjw

vulvrdjw1#

我可以用提供的代码在没有明显模式的情况下重现大约50%的错误(即从同一会话重复运行“Knit to HTML”将随机失败/工作)。
对我来说,如果我显式地指定method = "libcurl"作为download.file的参数(而不是默认的method = "auto",它在Windows上使用“wininet”),问题就解决了。

tdir <- tempdir()

stateurl <- "https://www2.census.gov/geo/tiger/GENZ2018/shp/cb_2018_us_state_500k.zip"
if(file.exists(paste(tdir,"/cb_2018_us_state_500k.shp",sep=""))==F){
download.file(stateurl, destfile = file.path(tdir, "States.zip"), method = "libcurl")
unzip(file.path(tdir,"States.zip"),exdir=tdir)}

有了这个“编织到HTML”是一贯的工作(至少对我的10+测试)。

zzlelutf

zzlelutf2#

我也遇到过类似的问题。我可以使用download.file从控制台中的url引用下载jpeg,但是当我在rmarkdown或夸托中使用相同的download.file调用时,我得到了一个错误:
下载文件(mod_image,destfile =“UA-MOD-casualty-image. jpg”,:无法打开URL 'http://www.mil.gov.ua/assets/images/resources/69864/47cf8333f4e8e8e367187ddd3a11c2761a1bd0cf.jpeg'调用:.main... eval_with_user_handlers -> eval -> eval -> download.file执行停止
(Note,这是MacOS 13.3。
我没有使用download.file,而是使用了curl::curl_download,它在rmarkdown和夸托中都能工作。
总而言之,download.file(url_for_image, destfile = "UA-MOD-casualty-image.jpg", method = "libcurl")
curl::curl_download(url_for_image, destfile = "UA-MOD-casualty-image.jpg", quiet = TRUE)
两者都可以在控制台中工作,但只有curl_download可以在rmarkdown或夸托中工作。
我不知道为什么download.file在夸托和rmarkdown中失败。大概是和knitr有一些互动。请注意,我显式地尝试将method设置为'libcurl'。

相关问题