【问题标题】:Accessing userid for a .yaml file访问 .yaml 文件的用户 ID
【发布时间】:2020-12-23 07:04:24
【问题描述】:

我使用 .yaml 文件作为我的一些 R 代码的配置文件。当我是唯一的 R 开发人员时,这并没有造成问题,但现在我们正试图让多人参与进来。我们不想继续重写配置文件,因为这很慢,我们不想创建单独的配置文件,因为我们不断向它们添加新元素,因此我们最终可能会运行不同的代码。

要访问 .yaml 文件,我通常在 R 中运行以下代码

config = yaml::read_yaml('base/config.yaml')

config.yaml 中的文本以

开头
experiments:
  # Config paths
  first: 'C:/Users/BNye/OneDrive/Science/experiments/first'
  second: 'C:/Users/BNye/OneDrive/Science/experiments/second'
  third: ...

等等。我想做的就是把它换成类似的东西

'C:/Users/{username}/OneDrive/Science/experiments/first'

当我在 R 中运行 config$experiments$first 时让它返回 'C:/Users/BNye/OneDrive/Science/experiments/first',但这只会将同一行文本 ('C:/Users/{username}/OneDrive/Science/experiments/first') 返回给我。使用setwd(paste0("C:/Users/",Sys.info()[6], "/OneDrive/Science/experiments")) 在 R 中工作正常,所以真正的挂断是配置。我应该如何编码?

【问题讨论】:

  • 在大多数系统上,~ 是您的用户主目录的别名。也许尝试像“~/OneDrive/Science/experiments/first”这样的路径。在 Windows 上,我认为它默认为您的文档文件夹,因此您可能必须上一个目录:'~/../OneDrive/Science/experiments/first'。您也可以考虑使用 the here package 之类的东西来帮助处理文件路径。

标签: r yaml config


【解决方案1】:

使用this query 作为参考,我找到了一种让 R 将配置文件解析为 R 表达式的方法。我的配置文件现在是:

experiments:
  # Config paths
  first: !expr 'paste0("C:/Users/",Sys.info()[6], "/OneDrive/Science/experiments/first")'
  second: !expr 'paste0("C:/Users/",Sys.info()[6], "/OneDrive/Science/experiments/second")'
  third: ...

然后,当我在 R 中阅读它时,我使用 config = yaml::read_yaml('base/config.yaml', eval.expr=TRUE) 并且它运行良好。这感觉像是一个脆弱的解决方案,但到目前为止它一直在坚持。

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 2018-09-24
    • 2018-03-22
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多