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

如何向期望文件输入的函数直接传递对象?

问题:直接向仅支持文件输入的函数传递对象

我经常碰到这种情况:想给导入的函数传对象,但该函数只接受文件作为输入。现在的做法是先把对象写入文件,再传文件路径给函数,不仅要事后删除临时文件,还打断了管道工作流。想跳过写文件这一步,直接传递对象。

比如ggmsa::readSSfile()能把点和括号组成的字符串转换成ggmsa::gghelix()可解析的列表,现有代码如下:

structure <- "..(.((((...)))).....((..))....)."
write(structure, file = "/user/data/structure.txt")
data <- ggmsa::readSSfile(file = "/user/data/structure.txt", type = "Vienna")
file.remove("/user/data/structure.txt")
ggmsa::gghelix(data)

有没有办法用类似read_file(file = pseudo_write(object))的写法“骗过”函数?


解决方案

在R中,有两种高效的方法可以绕开物理文件的读写,直接传递对象:

1. 内存连接(推荐)

利用textConnection()将字符串转换为内存中的文件连接对象,这类对象可以直接传给接受文件路径的函数(只要函数内部兼容连接输入)。针对你的场景,代码可以简化为:

structure <- "..(.((((...)))).....((..))....)."
# 创建内存连接并传入函数
data <- structure |> textConnection() |> ggmsa::readSSfile(type = "Vienna")
# 关闭所有未释放的连接(可选,避免资源占用)
closeAllConnections()
ggmsa::gghelix(data)

这种方式完全在内存中操作,不会生成任何物理文件,也不会打断管道工作流。

2. 自动清理的临时文件

如果函数不支持连接对象,可以用tempfile()生成系统临时文件——这类文件会在R会话结束后自动被系统清理,无需手动删除:

structure <- "..(.((((...)))).....((..))....)."
# 创建临时文件路径
temp_path <- tempfile(fileext = ".txt")
write(structure, file = temp_path)
data <- ggmsa::readSSfile(file = temp_path, type = "Vienna")
# 无需手动删除temp_path,会话结束自动清理
ggmsa::gghelix(data)

适配性说明

查看ggmsa::readSSfile()的文档可知,它的file参数支持连接对象,因此第一种内存连接的方法是最优解,完全满足你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:22:22