在OSF上下载CSV文件

后端开发 2026-07-09

我正在通过我在GitHub上的脚本,从一个公开的Open Science Framework(OSF)项目中下载一个.csv文件。我不想下载本地副本。

我根据查阅的若干网页,尝试了两种不同的URL选项来弄清楚这件事:

urlOSF <- "https://osf.io/dzr4e/files/74y5r"
urlOSF2 <- "https://osf.io/dzr4e/files/74y5r//?action=download"

我也尝试了几种不同的方式来导入数据,全部都没有成功:

# doesn't import any information from the csv
test <- read.csv(urlOSF)  
test <- read.csv2(urlOSF, header = TRUE, na.strings = "NA")

# leads to errors and warnings
test <- read.csv(urlOSF2)  
test <- read.csv2(urlOSF2, header = TRUE, na.strings = "NA")
Error in file(file, "rt") : 
  cannot open the connection to 'https://osf.io/dzr4e/files/74y5r//?action=download'
In addition: Warning message:
In file(file, "rt") :
  cannot open URL 'https://osf.io/download/dzr4e/': HTTP status was '500 Internal Server Error'

# also leads to errors
library(osfr)
test <- osf_retrieve_file(urlOSF) %>%
  osf_download()
test <- osf_retrieve_file(urlOSF2) %>%
  osf_download()
Error in `stop_dl_conflict()`:
! Can't download file 'EasternCanadaAtlanticSalmonFecundity.csv' from OSF.
  * Use the `conflicts` argument to avoid this error in the future.
Run `rlang::last_trace()` to see where the error occurred.

难道没有一种简单的方法吗?

解决方案

1) base R {utils}

Try this, i.e. https://osf.io/ +你的文件ID = 74y5r + /download

X <- read.csv("https://osf.io/74y5r/download")

一瞥

> str(X)
'data.frame':   5287 obs. of  21 variables:
 $ DU               : chr  "DU16" "DU16" "DU16" "DU16" ...
 $ RIVER_NO         : int  19 19 19 19 19 19 19 19 19 19 ...
 $ RIVER            : chr  "Miramichi River" "Miramichi River" "Miramichi River" "Miramichi River" ...
 $ YEAR             : int  1983 1983 1983 1983 1983 1983 1983 1983 1983 1983 ...
 $ LATITUDE         : num  46.9 46.9 46.9 46.9 46.9 ...
 $ LONGITUDE        : num  -65.6 -65.6 -65.6 -65.6 -65.6 ...
 $ EGG_COUNT        : num  3735 2114 4939 5950 2347 ...
 $ EGG_COUNT_COR    : num  3735 2114 4939 5950 2347 ...
 $ EGG_DIAM         : num  NA NA NA NA NA NA NA NA NA NA ...
 $ EGG_DIAM_COR     : num  NA NA NA NA NA NA NA NA NA NA ...
 $ STAGE_EGG_COUNT  : chr  "immature" "immature" "immature" "immature" ...
 $ FORK_LENGTH      : num  50.8 55 67.5 68.5 69 69 70 70 70.5 71 ...
 $ SIZE             : chr  "small" "small" "large" "large" ...
 $ RAGE             : int  NA 3 3 2 2 2 2 3 3 3 ...
 $ LAST_SPAWN       : chr  NA "1" "C" "2" ...
 $ FULTONS_K        : num  1.297 0.956 1.04 1.089 1.245 ...
 $ COLLECT_DOY      : int  194 218 238 204 199 205 234 178 251 192 ...
 $ SAMPLE_DOY       : int  194 218 238 204 199 205 234 178 251 192 ...
 $ STRIP_DOY        : int  NA NA NA NA NA NA NA NA NA NA ...
 $ SAMPLE_DATE_RANGE: int  1 1 1 1 1 1 1 1 1 1 ...
 $ CITATION         : chr  "Randall 1989" "Randall 1989" "Randall 1989" "Randall 1989" ...

2) {osfr}

不过,这会把文件 EasternCanadaAtlanticSalmonFecundity.csv 下载到给定的 path——从你的问题来看,你不想要这个。这里我使用工作目录,参见 ?osf_download

如要获得更规范地使用 osfr,请参见 这个很棒的回答

library(osfr)

# file_id = An OSF identifier corresponding to an OSF user, project, component, or file
file_id <- "74y5r"
osf_retrieve_file(file_id) |>
  osf_download(path = "~", progress = TRUE)

注意: 截至目前(01.05.2026),文件 https://osf.io/dzr4e/files/74y5r 已不再可用。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章