在R中,公式可以看作是一棵树,其中父节点位于索引[[1]]
上,左项和右项位于后续索引中。
例如,公式f
定义为:
f <- y ~ (a*x) +(b*x) + (c*z)
f[[1]]
是~
,f[[2]]
是y
。最后一项f[[3]]
将返回等式的右侧。f[[3]][[2]][[2]][[2]][[3]]
最终返回第一次出现的x
。
从这个Angular 来看,这个等式是一个类似于下面的树形数据结构:
我如何在树中导航以获得所有通向某个符号的路径?
例如,要到达x
,有两条路径,{3,2,2,2,3}和{3,2,3,2,3}。我们可以用f[[3]][[2]][[2]][[2]][[3]]
来检查,我们确实得到了x
在树中的第一次出现。
2条答案
按热度按时间px9o7tmv1#
可以使用
rrapply::rrapply()
递归搜索元素并返回索引:确认这些是公式中
x
的索引:enyaitl32#
下面是另一个在
rrapply::rrapply()
中使用how = "melt"
选项的解决方案。这将返回语法树中每个级别和每个叶子的索引,之后我们可以简单地过滤对应于x
值的行:或者更短,使用
rrapply::rrapply()
中的condition
参数: