2010-11-24 10 views
14

मैं एक कॉल करना चाहता हूं जो मुझे उन सभी कार्यों के नाम से एक वेक्टर लौटाए जो मैं वर्तमान आर सत्र में कॉल कर सकता हूं। क्या कोई यह जानता है कि इसे कैसे प्राप्त किया जाए?क्या आर में उपयोग किए जा सकने वाले सभी कार्यों के नाम से वेक्टर प्राप्त करने का कोई तरीका है?

(मैं उपयोगकर्ता इस सदिश के खिलाफ चर की जांच कर लें चाहते हैं हम उन जैसे, चर नाम के रूप में c में प्रवेश के साथ कुछ अनपेक्षित समस्या थी।)

अद्यतन: मैं सभी से फ़ंक्शन नाम प्राप्त करना चाहते हैं वर्तमान में लोड संकुल।

समाधान (आधा रास्ता):lsf.str() साथ जोरिस Meys टिप के आधार पर मैं निम्नलिखित समारोह है कि सभी वर्तमान में उपलब्ध समारोह नाम के साथ एक क्रमबद्ध वेक्टर रिटर्न के साथ आया था:

getFunctionNames <- function() { 
    loaded <- (.packages()) 
    loaded <- paste("package:", loaded, sep ="") 
    return(sort(unlist(lapply(loaded, lsf.str)))) 
} 

बू, टी यह भी देखना जोरीस मेस के पोस्ट पर भी बेहतर उत्तरों के लिए टिप्पणियां।

+0

अपने अद्यतन पुन, मैं findfuns का एक संशोधित संस्करण (जोड़ लिया है) करता है वास्तव में। –

+1

आप बस लोड कर सकते हैं <- search() [- 1], तो आप पेस्ट फ़ंक्शन से बचें। यह सुनिश्चित करना सुनिश्चित करें कि आपकी वापसी एक अच्छी तरह से वेक्टर प्रदान करती है या नहीं। मेरे आर संस्करण पर मुझे कहीं भी छिपे हुए फ़ंक्शन नामों के साथ बहुत सारे खराब टेक्स्ट के बजाय फ़ंक्शन नामों की एक साफ सूची प्राप्त करने के लिए आवेदन के रूप में as.character को घोंसला करना पड़ा। मेरा संपादन भी देखें। –

उत्तर

15

मैं शुरुआत के रूप में lsf.str() का उपयोग करूंगा।

उदाहरण: x <- as.character(lsf.str("package:base")) आपको आधार पैकेज में सभी कार्यों की एक सूची देता है। आप उन सभी संकुल को जोड़ सकते हैं जिन्हें आप जांचना चाहते हैं। stats और utils पहले दिमाग में आते हैं।

संपादित करें: वर्तमान में लोड पैकेज के बारे में अपने प्रश्न के बारे में:

एक्स < - असूचीबद्ध (sapply (खोज() [- 1], समारोह (एक्स) as.character (lsf.str (x))))टिप्पणियां

pkgs <- search() 
pkgs <- pkgs[grep("package:",pkgs)] 
y <- unlist(sapply(pkgs,lsf.str)) 

काम कर देता है देखते हैं।

+0

मेरे पास इंप्रेशन है, 'as.character' भाग की आवश्यकता नहीं है। तो: 'y <- असूची (sapply (खोज() [- 1], lsf.str)) 'चाल भी करता है। – Henrik

+0

@ हेनरिक: सही, मैं –

+0

@ जोरीस समायोजित करता हूं: जागरूक रहें कि अन्य चीजें खोज पथ (संलग्न वस्तुओं [eghgh yuck!]), संभवतः वातावरण (?)) पर हो सकती हैं, इसलिए शायद उन लोगों का उपयोग करना बेहतर होगा '" पैकेज: "उनमें से। –

6

मैं पर आर-सहायता के लिए एक समान क्यू पूछा कई चन्द्रमाओं पहले (2007) और प्रो ब्रायन रिप्ले एक समाधान के रूप में प्रदान:

findfuns <- function(x) { 
    if(require(x, character.only=TRUE)) { 
     env <- paste("package", x, sep=":") 
     nm <- ls(env, all=TRUE) 
     nm[unlist(lapply(nm, function(n) exists(n, where=env, 
               mode="function", 
               inherits=FALSE)))] 
    } else character(0) 
} 
pkgs <- dir(.Library) 
z <- lapply(pkgs, findfuns) 
names(z) <- pkgs 
Z <- sort(unique(unlist(z))) 

कौन सा की तरह उत्पादन देता है:

> head(Z) 
[1] "^"  "-"  "-.Date" "-.POSIXt" ":"  "::" 

यह ऑब्जेक्ट pkgs द्वारा निर्दिष्ट संकुल में सभी कार्यों को खोजने के लिए था ताकि आप नियंत्रित कर सकें कि कौन से पैकेज लोड/चेक किए गए हैं।

एक संशोधित संस्करण है कि संकुल की वर्तमान में लोड सेट पर काम होगा:

findfuns2 <- function(pkgs) { 
    nm <- ls(pkgs, all = TRUE) 
    nm[unlist(lapply(nm, function(n) exists(n, where = pkgs, 
              mode = "function", 
              inherits = FALSE)))] 
    if(isTRUE(all.equal(length(nm), 0))) 
     character(0) 
    else 
     nm 
} 

pkgs <- search() 
pkgs <- pkgs[grep("package:", pkgs)] 
z <- lapply(pkgs, findfuns2) 
z <- sort(unique(unlist(z))) 
head(z) 
+0

@ गैविन: lsf.str() के साथ क्या गलत है? –

+0

@ जोरीस - कुछ भी नहीं, सिवाय इसके कि मुझे पता नहीं था कि यह अस्तित्व में था :-) –

+1

@ जोरीस: बस 'ls.str' पर देखें - यह मूल रूप से ब्रायन के' findfuns() 'और मेरे संशोधित संस्करण को करता है। मान लीजिए कि यह 2007 में मौजूद नहीं था। –

संबंधित मुद्दे

 संबंधित मुद्दे