r - 正确解析 R 中的“公式”对象
问题描述
如何fo
正确解析 R 公式对象 ( )(即,解析时不将其转换为字符串)?
假设我有以下内容:
## Creating a formula object
fo <- y ~ x1 + x2 | 0 + z1 + z2 + z3 + z4 + z5
class(fo)
##[1] "formula"
typeof(fo)
##[1] "language"
strsplit(fo, split='|', fixed=TRUE)
##Error in strsplit(fo, split = "|", fixed = TRUE) : non-character argument
希望我想把它解析成三个原子向量:
- 因变量:
c("y")
。 - 回归者:
c("x1", "x2")
。 - 其他:(
c("z1", "z2", "z3", "z4", "z5")
不包括0
)。
解决方案
公式的树结构分解如下:
- 顶层:
~
(y,响应)
在内部,这是一个类似列表的对象,其中第一个元素是运算符 ( ~
),第二个元素是第一个参数,第三个元素是第三个参数。
所以deparse(fo[[2]])
让你“y”
- 下一级(响应):(
|
x1+x2, 0 + ...)。相同的一般结构(第一个元素是运算符|
,第二个元素是第一个 arg,第三个元素是第二个 arg)
fo[[c(3,2)]]
就这样x1+x2
。
all.vars(fo[[c(3,2)]])
获取栏左侧的变量
all.vars(fo[[c(3,3)]])
获取栏右侧的变量
如果您想提取术语而不是变量,这将变得相当棘手;例如all.vars(quote(log(x))
得到“x”,而不是“log(x)”
推荐阅读
- javascript - 从没有jquery的字符串中获取标签内容
- blueprism - 在 Blueprism 中发送击键的问题
- sql - SQL 触发器 - 提交更新和 CATCH 过程块
- r - Shiny App Google Analytics API 连接不起作用:找不到 JSON 文件
- python - Discord API 在尝试导入时出错
- ruby-on-rails - 如何在图像标签选项中编写 ruby 代码?
- zlib - IPP 修补了 ZLIB 缺失的符号
- sockets - 在 JavaFX 中的客户端服务器聊天应用程序中向所有人发送消息
- android - 在 python 脚本中通过 shell 命令打开一个 android 应用程序
- python - conda install sklearn_crfsuite 在 spyder 中不起作用