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

如何在R脚本中自动响应PC-Clocks甲基化分析的系统提示?

自动响应PC-Clocks脚本的交互式输入

问题背景

在使用PC-Clocks工具进行甲基化年龄加速分析时,calcPCClocks和calcPCClocks_Accel两个函数会触发交互式提示,分别需要手动输入SampleID和No。由于数据规模大无法全程监控,需要实现自动响应。

原执行脚本:

# 获取PC Clocks值及加速值
PCClock_DNAmAge <- calcPCClocks(path_to_PCClocks_directory = clocksDir,
                                     datMeth = datMeth,
                                     datPheno = datPheno)
# 计算加速值需要datPheno中包含"Age"列(同PCGrimAge要求)
PCClock_DNAmAge1 <- calcPCClocks_Accel(PCClock_DNAmAge)

触发的交互提示:

  1. 调用calcPCClocks时:

To check whether datMeth and datPheno match up, type the column name in datPheno with sample names (or type skip): SampleID

  1. 调用calcPCClocks_Accel时:

Do you want all of the GrimAge Components? (yes/no) No


解决方案

方法1:模拟标准输入流(无需额外依赖)

通过textConnection构造输入流,让函数自动读取预设的响应内容:

# 自动响应calcPCClocks的输入请求
PCClock_DNAmAge <- with(list(stdin = textConnection("SampleID\n")), {
  calcPCClocks(path_to_PCClocks_directory = clocksDir,
               datMeth = datMeth,
               datPheno = datPheno)
})

# 自动响应calcPCClocks_Accel的输入请求
PCClock_DNAmAge1 <- with(list(stdin = textConnection("No\n")), {
  calcPCClocks_Accel(PCClock_DNAmAge)
})

方法2:用mockery包模拟readline调用

如果函数内部通过readline获取输入,可以用mockery包替换readline的返回值:

# 安装并加载mockery包(仅首次使用需要安装)
install.packages("mockery")
library(mockery)

# 模拟calcPCClocks的输入响应
with_mock(readline = function(...) "SampleID", {
  PCClock_DNAmAge <- calcPCClocks(path_to_PCClocks_directory = clocksDir,
                                 datMeth = datMeth,
                                 datPheno = datPheno)
})

# 模拟calcPCClocks_Accel的输入响应
with_mock(readline = function(...) "No", {
  PCClock_DNAmAge1 <- calcPCClocks_Accel(PCClock_DNAmAge)
})

注意事项

  • 确保datMeth、datPheno和clocksDir变量已正确定义,且datPheno中存在SampleID和Age列。
  • 如果函数使用scan而非readline获取输入,需调整模拟逻辑,例如为scan指定预设输入流。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:35:01