2011-11-15 16 views
5

मैं फ़ंक्शंस का एक सेट ढूंढना चाहता हूं और उन्हें सहेजना चाहता हूं, क्योंकि मैं उन्हें एक Rdata फ़ाइल में रिमोट सर्वर पर भेजना चाहता हूं, और मैं सर्वर पर एक नया पैकेज स्थापित नहीं करना चाहता हूं।किसी फ़ंक्शन के अंदर ls() का उपयोग करके पर्यावरण को कैसे खोजा जाए?

हालांकि मुझे नीचे दिए गए दृष्टिकोण का उपयोग करके त्रुटि मिल रही है, आसान/बेहतर दृष्टिकोण का स्वागत है।

मेगावाट:

यहाँ दो डमी कार्य:

abcd.fun.1 <- function() return(1) 
abcd.fun.2 <- function() return(2) 

मैं डमी कार्यों की पहचान कर सकते हैं:

ls()[grep('abcd', ls())] 

लेकिन जब मैं एक समारोह में इस लपेट:

find.test <- function(x) { 
    return(ls()[grep(x, ls())]) 
} 
find.test('abcd') 

फ़ंक्शन character(0)

अंत में मैं

save(find.test('abcd'), file = test.Rdata) 

उत्तर

9
  1. ls को pattern= तर्क का उपयोग नहीं क्यों चाहते हैं?
  2. ls एक समारोह के अंदर कॉलिंग ऑब्जेक्ट समारोह दायरे के भीतर मौजूद हैं, नहीं वैश्विक वातावरण (इस ?ls से समझाया गया है) सूचीबद्ध करता है।

यदि आप किसी फ़ंक्शन से वैश्विक वातावरण में ऑब्जेक्ट्स को सूचीबद्ध करना चाहते हैं, तो envir=.GlobalEnv निर्दिष्ट करें।

x <- 1:10 
f <- function() ls() 
g <- function() ls(envir=.GlobalEnv) 
h <- function() ls(envir=.GlobalEnv, pattern="[fg]") 
f() 
# character(0) 
g() 
# [1] "f" "g" "h" "x" 
h() 
# [1] "f" "g" 
+0

globalenv() इन दिनों – hadley

+0

@ हैडली पसंद किया गया है: क्या आप समझा सकते हैं क्यों? –

+0

हम्म, मैं शपथ ले सकता था कि यह प्रलेखन में है लेकिन मुझे लगता है कि नहीं। उस स्थिति में यह सिर्फ व्यक्तिगत राय है: मुझे लगता है कि वैश्विक से एक समारोह का उपयोग करना अच्छा है। – hadley

7

आपको अपने कार्य को अन्य वातावरण के अलावा अन्य वातावरण में सूचीबद्ध करने के लिए बताना होगा, उदा। वैश्विक पर्यावरण (और जब आप ऐसा कर रहे हैं, आप भी ls लिए एक तर्क के रूप regex पैटर्न निर्दिष्ट कर सकते हैं।):

find.test <- function(x, envir=.GlobalEnv) { 
    ls(pattern=x, envir=envir) 
} 

के बारे में ls() और ?environment अन्य विकल्प पर्यावरण को निर्दिष्ट करने के लिए अधिक जानकारी के लिए ?ls देखें।