You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言HTTP场景下Grep应用问题:文件无法下载及file_names为空排查

问题原因分析
  • list.files()不支持远程FTP/HTTP路径:这个函数仅用于遍历本地文件系统,无法读取NCBI FTP服务器上的文件列表,因此list.files(url)返回空值,后续grep自然无法筛选出有效文件名。
  • 正则模式使用错误:pattern是一个包含多个字符串的向量,grep()默认仅使用向量中的第一个模式进行匹配,无法同时匹配所有目标文件编号对应的文件名。
修正后的代码

首先需要安装并加载curl包(用于读取远程FTP目录):

# 安装curl包(首次运行需要)
install.packages("curl")
library(curl)

# 设定FTP地址
url <- "ftp://ftp.ncbi.nlm.nih.gov/pub/pmc/manuscript/xml/"

# 生成目标文件编号
file_nums <- sprintf("%02d", 1:3) 

# 合并正则模式:匹配所有目标编号的文件
pattern <- paste0("^author_manuscript_xml.PMC0(", paste(file_nums, collapse = "|"), ")")

# 获取FTP服务器上的文件列表
ftp_files <- curl::list_ftp(url)

# 筛选出目标文件名
file_names <- grep(pattern, ftp_files$name, value = TRUE)

# 循环下载文件
for (file_name in file_names) {
  file_url <- paste0(url, file_name)
  # 使用curl_download更稳定,也可以保留download.file
  curl::curl_download(file_url, destfile = file_name)
}
关键修改说明
  1. 替换list.files()为curl::list_ftp():专门用于读取FTP服务器的文件列表,返回的数据框包含文件名等信息。
  2. 合并正则模式:用paste(collapse = "|")将多个文件编号合并成一个正则表达式,确保能同时匹配所有目标文件。
  3. 使用curl::curl_download()替代download.file():对远程文件下载的兼容性和稳定性更好,尤其是FTP协议场景。

内容的提问来源于stack exchange,提问作者nora job

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 13:25:19