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

Bash批量传递文件名给R程序,如何实现R端接收?

解决R脚本批量处理文件时接收输入的问题

你的核心问题是:Bash脚本用重定向(<)传递文件内容给R,但commandArgs()只能获取命令行参数,无法读取标准输入流的内容。下面提供两种可行解决方案:

方案1:将文件名作为命令行参数传递(推荐)

修改Bash脚本,把文件名直接作为参数传给R脚本,这样R就能通过commandArgs()拿到文件名并读取。

修正后的Bash脚本

注意原脚本中j的循环括号存在语法错误(需把)改为}),同时调整传参方式:

#!/bin/bash

for i in {0..100}
do
    for j in {1..100}
    do
        # 将文件名作为命令行参数传给R脚本
        Rscript program.R file-type$i-sector$j.tsv
    done
done

对应的R脚本代码

用commandArgs(trailingOnly = TRUE)获取传入的文件名,再执行读取操作:

# 获取命令行传入的第一个参数(即目标文件名)
input_file <- commandArgs(trailingOnly = TRUE)[1]

# 读取文件,保留你原有的参数设置
data <- read.table(file = input_file, sep = '\t', header = TRUE, fill = TRUE)

# 在这里添加你的文件处理逻辑

方案2:直接读取标准输入(无需修改Bash脚本)

如果不想改动Bash的重定向逻辑,可让R直接读取标准输入流的内容,指定file = "stdin"即可:

R脚本代码

# 直接读取Bash重定向过来的标准输入内容
data <- read.table(file = "stdin", sep = '\t', header = TRUE, fill = TRUE)

# 在这里添加你的文件处理逻辑

说明

此方式下,Bash的< file-typeX-sectorY.tsv操作会把文件内容直接传入R的标准输入流,R通过stdin就能完整读取文件内容,无需依赖commandArgs()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:20:43