在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
相关产品推荐
相关产品推荐

