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

在Rmarkdown中使用here包结合write_delim保存无列名制表符分隔TXT文件至子目录的报错排查

问题分析与解决方法

嘿,你这是踩了参数顺序搞混的坑啦!咱们来拆解一下错误原因和正确写法:

错误根源

readr::write_delim()的第一个参数必须是要保存的数据框,第二个参数才是目标文件的路径。但你把数据框file塞进了here::here()的参数里,相当于让here()去解析一个数据框作为路径的一部分——这显然不对!

这样一来,write_delim()接收到的第一个参数变成了here()返回的路径字符串,而不是数据框,自然就触发了报错:Error in readr::write_delim(...) : is.data.frame(x) is not TRUE。

正确代码写法

你只需要调整参数顺序,把数据框放在write_delim()的第一个位置,用here::here()生成的路径作为第二个参数,其他参数(delim、col_names)正常放在后面就行:

# 先定义可复现的数据框
file <- data.frame(chromosome = c("chr1", "chr2", "chr3"), 
                   start = c(10, 20, 30), 
                   stop = c(100, 200, 300), 
                   gene = c("geneA", "geneB", "geneC"))

# 正确的保存代码
readr::write_delim(
  x = file,  # 第一个参数:要保存的数据框
  file = here::here("output", "data", "file.txt"),  # 第二个参数:用here生成的路径
  delim = "\t", 
  col_names = FALSE
)

额外说明

here::here()的作用是基于项目根目录生成相对路径,它只需要接收路径的各个子目录/文件名作为参数,完全不需要把数据框传进去。你之前硬编码路径能成功,就是因为正确把数据框放在了write_delim()的第一个参数位置,现在只需要用here()替换掉硬编码的路径字符串就好啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 10:39:09