2012-06-18 19 views
8

संभव डुप्लिकेट:
how to save() with a particular variable nameसहेजें वस्तु वस्तु नाम के साथ चर का उपयोग कर

मैं सोच रहा हूँ क्या एक आसान तरीका आर में एक वस्तु को बचाने के लिए, के साथ एक चर objectName उपयोग कर रहा है सहेजे जाने के लिए ऑब्जेक्ट का नाम। मैं चाहता हूं कि यह फ़ाइल नाम में उनके नाम के साथ ऑब्जेक्ट्स को आसानी से सहेज ले।

मैंने get का उपयोग करने का प्रयास किया, लेकिन मैंने ऑब्जेक्ट को इसके मूल ऑब्जेक्ट नाम से सहेजने का प्रबंधन नहीं किया।

उदाहरण:

अगर मैं वस्तु "अस्थायी" कहा जाता है, जो मैं निर्देशिका "DATADIR" में सहेजना चाहते हैं। मैंने ऑब्जेक्ट का नाम वैरिएबल "ऑब्जेक्टनाम" में रखा है।

प्रयास 1:

objectName<-"temp" 
save(get(objectName), file=paste(dataDir, objectName, ".RData", sep="")) 
load(paste(dataDir, objectName, ".RData", sep="")) 

यह काम नहीं किया, क्योंकि आर एक वस्तु get(objectName) कहा जाता है को बचाने के लिए कोशिश करता है, इस कॉल के परिणाम के बजाय। ,

objectName<-"temp" 
object<-get(objectName) 
save(object, file=paste(dataDir, objectName, ".RData", sep="")) 
load(paste(dataDir, objectName, ".RData", sep="")) 

यह स्पष्ट रूप से काम नहीं किया क्योंकि आर नाम "वस्तु" के साथ वस्तु बचाता है, और नाम "अस्थायी" के साथ नहीं:

प्रयास 2: तो मैं निम्नलिखित की कोशिश की। लोड करने के बाद मेरे पास "अस्थायी" की बजाय "ऑब्जेक्ट" की एक प्रति है। (हाँ, एक ही सामग्री के साथ ... लेकिन यह वही नहीं है जो मैं चाहता हूं :))। तो मैंने सोचा कि यह पॉइंटर्स के साथ कुछ होना चाहिए।

प्रयास 3::

objectName<-"temp" 
object<<-get(objectName) 
save(object, file=paste(dataDir, objectName, ".RData", sep="")) 
load(paste(dataDir, objectName, ".RData", sep="")) 

प्रयास 2. के रूप में एक ही परिणाम लेकिन मुझे यकीन है मैं कर रहा हूँ कि मैं क्या लगता है कि मैं कर रहा हूँ नहीं कर रहा हूँ तो निम्नलिखित की कोशिश की।

इसके लिए समाधान क्या है?

उत्तर

12

save(list=objectName, file=paste(objectName, '.Rdata', sep='')) आज़माएं।

महत्वपूर्ण यह है कि save को list तर्क चरित्र स्ट्रिंग की एक सूची है कि वस्तुओं के नाम को बचाने के लिए (के बजाय वास्तविक वस्तुओं ... के माध्यम से पारित की तुलना में) लेता है।

+0

यह वही है जो मुझे चाहिए, धन्यवाद! – FBE

+1

आप 'paste0 (objectName,' .RData ')' का भी उपयोग कर सकते हैं, जो आपको कुछ स्ट्रोक बचाएगा। –

1

मुझे आपके उदाहरणों को समझने में कठिनाई मिली, लेकिन मैं जो चाहता हूं उसकी दो संभावनाओं के बारे में सोच सकता हूं। आप या तो फ़ाइल नाम objectName.RData या temp.RData के रूप में सहेजना चाहते हैं। यहाँ कैसे आप दोनों करते हैं:

objectName<-"temp" 

# This saves the object as "temp.RData" 
save(objectName, file=paste(dataDir, objectName, ".RData", sep="")) 
# Loading it will bring it back with the name objectName, and the value temp 
load(paste(dataDir, 'temp', '.RData', sep='')) 

# This saves the object as "objectName.RData" 
save(objectName, file=paste(dataDir, deparse(substitute(objectName)), ".RData", sep="")) 
# Loading it will bring it back with the name objectName, and the value temp 
load(paste(dataDir, 'objectName', '.RData', sep='')) 

अपने प्रयास की सभी एक त्रुटि लौट क्योंकि आप get गलत तरीके से कहा जाता है। यह get('objectName') होना चाहिए था, लेकिन यदि आप इसके बारे में सोचते हैं, तो यह आपको objectName जैसा ही होगा।

+0

हम्म ... मुझे लगता है कि मेरे उदाहरण जहां पर्याप्त स्पष्ट नहीं हैं। ऐसा नहीं है कि मैं ऑब्जेक्ट "ऑब्जेक्टनाम" को सहेजना चाहता हूं, लेकिन ऑब्जेक्ट को "temp" कहा जाता है।उदाहरण के लिए; "temp" एक 'data.frame' है जिसे मैं सहेजना चाहता हूं। तो मैं सिर्फ 'objectName <- "temp" करना चाहता हूं और उदाहरण के लिए' सेव 'कोड लाइन चलाता हूं। (कारण यह है कि मुझे केवल ऑब्जेक्ट नाम के लिए मान बदलना है, और सभी सेव और लोड कोड (और कुछ अन्य सामान) को बदलने की आवश्यकता नहीं है) – FBE

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