如何解析和修改 R 表达式(可能使用非标准评估)?

sea*_*avi 1 r lazy-evaluation pryr

我想将 R 表达式解析为列表,并在最终将其转换为 json 对象之前选择性地修改它的各个方面。举个例子,我正在尝试实现以下目标:

{"op": "=",
      "content": {
          "lhs": "gender",
          "rhs": ["male"]
      }
}
Run Code Online (Sandbox Code Playgroud)

我将从 R 表达式开始,例如:

gender == "male"
Run Code Online (Sandbox Code Playgroud)

我可以用来pryr::ast获取树的文本版本,但我想将其作为列表获取,例如:

op: "=="
  [[1]]: "gender"
  [[2]]: "male"
Run Code Online (Sandbox Code Playgroud)

列表的“格式”细节并不那么重要,只要清楚即可。我的目标只是获得一个可计算且可修改的 R 表达式解析树。

Hon*_*Ooi 5

您正在寻找这样的东西吗?

expr <- quote(gender == "male")

expr[[1]]
# `==`
expr[[2]]
# gender
expr[[3]]
# "male"
expr[[3]] <- "female"
expr
# gender == "female"
Run Code Online (Sandbox Code Playgroud)