2016-07-28 11 views
5

पर एक Rstudio addin पैकेज में शामिल किया गया है मेरे पास here स्थित एक rstudio addin पैकेज है।प्रतिलिपि .rmd फ़ाइल को उपयोगकर्ता परिभाषित निर्देशिका

एडिन में से एक उपयोगकर्ता को निर्देशिका परिभाषित करने की अनुमति देता है और यह उस निर्देशिका में पैकेज में स्थित फ़ाइल की प्रतिलिपि बना देगा।

फ़ाइल स्थित है:

atProjectManageAddins/inst/Docs/RMarkdownSkeleton.Rmd 

और मैं कुछ इस तरह से उपयोगकर्ता परिभाषित डायरेक्टरी में कॉपी करने के लिए कोशिश कर रहा हूँ:

file.copy("inst/Docs/RMarkdownSkeleton.Rmd", 
      paste0(Dir, FolderName, "/Reports/", FolderName, "_report.Rmd")) 

कहाँ मैं कहाँ से इसे कॉपी कोशिश कर रहा हूँ पैकेज में है, जहां उपयोगकर्ता इसे परिभाषित करता है (दो अलग-अलग तर्क Dir और FolderName) के आधार पर।

लेकिन ऐसा लगता है कि यह काम नहीं करता है। मेरी धारणा यह है कि मैं सही तरीके से पैकेज निर्देशिका का जिक्र नहीं कर रहा हूं। मैंने ./Inst/, ~/Inst/ और शायद कुछ और कोशिश की है। मेरी धारणा अब यह है कि काम करने के लिए file.copy() प्राप्त करने में मेरी असमर्थता के लिए एक और व्यवस्थित कारण है।

कोई सुझाव? क्या यह भी संभव है?

ध्यान दें कि यदि मैं source() और runGadget() के माध्यम से स्थानीय रूप से फ़ंक्शन चलाता हूं, तो यह ठीक काम करता है। केवल तभी जब पैकेज स्थापित होता है और मैं RStudio addins GUI का उपयोग करता हूं जहां यह घुमावदार पैकेज का संदर्भ देता है, तो यह विफल हो जाता है। इस प्रकार, मुझे पूरा यकीन है कि मैं स्थापित .Rmd फ़ाइलों के लिए फ़ाइल पथ को सही ढंग से परिभाषित नहीं कर रहा हूं।

संपादित करें: मैं कार्ल के सुझाव (जैसा कि जिथब पर देखा जा सकता है) के आधार पर निम्नलिखित में बदल गया है, लेकिन फाइलों की अभी भी प्रतिलिपि नहीं बनाई जा रही है।

file.copy(system.file("Docs","Rmarkdownskeleton.rmd",package="atProjectManageAd‌​dins"), 
paste0(Dir, FolderName, "/Reports/", FolderName, "_report.Rmd")) 
+0

आप 'file.path' के साथ कुछ भी करने की कोशिश की है:

अपने विशिष्ट मामले में, इस चाल करना चाहिए? – MichaelChirico

+0

मैंने किया। मुझे कुछ प्रश्न/समाधान मिले जो 'फ़ाइल' का इस्तेमाल करते थे।पथ 'समान प्रश्नों के लिए, लेकिन मेरे अंत में एक समाधान समाधान प्राप्त करने में असमर्थ था। –

+0

यदि आप 'file.copy ("...", "~/डेस्कटॉप /")' कोशिश करते हैं तो क्या होता है? – MichaelChirico

उत्तर

4

system.file एक पैकेज से एक फ़ाइल प्राप्त करने के लिए सबसे अच्छा कार्य है। मेरा मानना ​​है कि यह आपके लिए काम करना चाहिए:

file.copy(system.file("Docs","Rmarkdownskeleton.rmd",package="atProjectManageAd‌​dins"), 
paste0(Dir, FolderName, "/Reports/", FolderName, "_report.Rmd")) 
+1

यदि मैं बस फ़ंक्शन को स्रोत करता हूं और runGadget() का उपयोग करता हूं, तो यह काम करता है, लेकिन जब मैं स्थापित पैकेज से अद्यतन एडिन चलाता हूं, तो यह उन्हें कॉपी नहीं करता है। –

+0

हम्म, मुझे आगे की जांच करनी होगी। – Carl

+0

मैं अपने अंत में डिबगिंग कर रहा हूं, लेकिन किसी भी डिबगिंग परीक्षण में मुझे एडिन करना था जो ' स्थानीय रूप से ', पैकेज से स्थापित होने पर कुछ भी नहीं कर रहा है। मुझे आश्चर्य है कि क्या एडिन के साथ किसी भी प्रकार की अजीब अनुमति समस्या है। –

0

आप सही विचार inst/ में फ़ाइलें रखने का मिला है। वर्तमान निर्देशिका के लिए पैकेज निर्देशिका से फ़ाइल की प्रतिलिपि करने

इस कोड का उपयोग करें:

file.copy(from = file.path(path.package("packagename"), "path/to/file"), 
     to = file.path("path/to/file"), overwrite = T) 

file.path तार इसे करने के लिए पारित कर दिया श्रृंखलाबद्ध द्वारा एक रास्ता बनाता है (ओएस विशेष विभाजक स्वचालित रूप से जोड़ रहे हैं)।
path.packageलोड पैकेज का मार्ग पुनर्प्राप्त करता है। inst/ में प्रस्तुत की गई फ़ाइलों को पैकेज डीआईआर की रूट पर कॉपी किया गया है, इस प्रकार "पथ/टू/फाइल" यहां आपके inst/ डीआईआर के सापेक्ष पथ होना चाहिए।
overwrite का उपयोग फ़ाइल को ओवरराइट करने के लिए किया जा सकता है यदि यह पहले से मौजूद है।

file.copy(file.path(path.package("atProjectManageAddins"), "Docs/RMarkdownSkeleton.Rmd", 
      file.path(getwd(), "Reports", paste0(reportName, "_report.Rmd"))) 
संबंधित मुद्दे