Załóżmy, że ma następujący wzór:Jak wybrać część wzoru we wzorze w R?
fr <- formula(y~myfun(x)+z)
fr
dany obiekt nie jest funkcją R, która zwraca na myfun(x)
? Napisałem swoją własną funkcję (kod poniżej), który zasadniczo robi to, czego potrzebuję, ale może jest jakiś standardowy sposób robienia tego?
Kod dla mojej funkcji:
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)
}
Oto kilka przykładów:
> 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)
Bardzo blisko tego, czego szukałem. Parsowanie formuł jest fajne, ale miło jest mieć kogoś, kto je dla mnie przetworzył :) – mpiktas
Zastanawiam się: być może istnieje sposób na zwrócenie definicji 'f' jako obiektu typu string, tj.' Fname <- "formuła (y ~ myfun (stuff) + z) ". Następnie możesz po prostu zrobić "grep" dla wszystkiego pomiędzy "~" i ")". –
@CarlWitthoft, Potrzebuję również rzeczy w nawiasach. Przekonwertowanie formuły na string i używanie grep nie jest moim zdaniem dobrym pomysłem. – mpiktas