मान लीजिए मैं एक निम्न सूत्र है:आर में सूत्र में सूत्र का एक हिस्सा कैसे चुनें?
fr <- formula(y~myfun(x)+z)
को देखते हुए वस्तु fr
वहाँ आर में एक समारोह जो 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)
मैं जो देख रहा था उससे काफी करीब था। पार्सिंग सूत्र मजेदार है, लेकिन किसी और को मेरे लिए उन्हें पार्स करना अच्छा लगता है :) – mpiktas
मुझे आश्चर्य है: शायद 'f' की परिभाषा को स्ट्रिंग ऑब्जेक्ट के रूप में परिभाषित करने का एक तरीका है, यानी' fname <- "formula (y ~ माईफुन (सामान) + जेड) "'। फिर आप "~" और ")" के बीच सबकुछ के लिए 'grep' कर सकते हैं। –
@CarlWitthoft, मुझे भी ब्रांड्स में सामान की आवश्यकता है। सूत्र को कनवर्ट करना और grep का उपयोग करना मेरी राय में एक अच्छा विचार नहीं है। – mpiktas