gpt4 book ai didi

r - 如何在R中的公式中选择公式的一部分?

转载 作者:行者123 更新时间:2023-12-04 09:41:34 26 4
gpt4 key购买 nike

假设我有以下公式:

fr <- formula(y~myfun(x)+z)

给定对象 fr R 中有返回 myfun(x) 的函数吗? ?我已经编写了自己的函数(下面的代码),它基本上可以满足我的需要,但也许有一些标准的方法可以做到这一点?

我的函数的代码:
selectmds <- function(expr,funcn) {
if(length(expr)>2) {
a <- expr[[2]]
b <- expr[[3]]
if(length(a)>1) {
if(as.name(a[[1]])==funcn) {
if(length(grep(funcn,all.names(b)))>0) {
return(list(a,selectmds(b,funcn)))
}
else return(list(a))
}
}
if(length(b)>1) {
if(as.name(b[[1]])==funcn) {
if(length(grep(funcn,all.names(a)))>0) {
return(list(b,selectmds(a,funcn)))
}
else return(list(b))
}
}
for(i in 2:length(expr)) {
if(length(grep(funcn,all.names(expr[[i]])))>0)return(selectmds(expr[[i]],funcn))
}
}
return(NULL)
}

这里有几个例子:
> selectmds(formula(y~myfun(x)+z),"myfun")
[[1]]
myfun(x)


> unlist(selectmds(formula(y~myfun(x)+z+myfun(zz)),"myfun"))
[[1]]
myfun(zz)

[[2]]
myfun(x)

最佳答案

不确定这是最好的,但您可以通过以下方式做到:

f <- function(fm, fun) {
l <- as.list(attr(terms(fm), "variables"))[-1]
l[grep(fun, l)]
}

然后,
> f(formula(y~myfun(x)+z),"myfun")
[[1]]
myfun(x)

> f(formula(y~myfun(x)+z+myfun(zz)),"myfun")
[[1]]
myfun(x)

[[2]]
myfun(zz)

关于r - 如何在R中的公式中选择公式的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10224805/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com