दिलचस्प पोस्ट
JSON के लिए XSLT बराबर एक वृक्ष संरचना को हैशिंग करना जीआईटी: एक विशिष्ट फ़ोल्डर में चेकआउट अजगर में एक डिक्ट कुंजी के रूप में मैं सूची का उपयोग क्यों नहीं कर सकता? IOS 7 UIImagePicker पूर्वावलोकन काली स्क्रीन PopupWindow $ BadTokenException: विंडो जोड़ने में असमर्थ – टोकन नल मान्य नहीं है फ़ोल्डर में सभी फ़ाइलों / फ़ोल्डर को कैसे लें, लेकिन फ़ोल्डर ही नहीं? किसी अन्य वर्ण के साथ स्ट्रिंग में कुछ वर्णों को बदलना वाष्पशील बनाम इंटरलॉक बनाम लॉक ListBoxItem के अंदर जटिल UI ES6: नए कीवर्ड के बिना कॉल क्लास कन्स्ट्रक्टर कैसे एक std :: स्ट्रिंग को char * या char * को बदलने के लिए परिवर्तित करें? पॉइंटर बनाम संदर्भ प्रोग्राम के एक उपकरण के एंड्रॉइड एपीआई स्तर प्राप्त करते हैं? एचटीटीपीएस पर @ फ़ॉन्ट चेहरा ईओटी लोड नहीं हो रहा है

निर्देशिका के अस्तित्व की जाँच करें और यदि मौजूद नहीं है तो बनाएं

मैं अक्सर खुद को आर स्क्रिप्ट लिखता हूं जो बहुत सारे आउटपुट उत्पन्न करते हैं I मुझे यह आउटपुट इसे अपनी निर्देशिका (एस) में रखने के लिए क्लीनर मिल रहा है मैंने जो लिखा है वह एक निर्देशिका के अस्तित्व की जांच करेगी और इसमें स्थानांतरित हो जाएगी, या निर्देशिका बनायेगी और फिर उसमें जायेंगी क्या यह दृष्टिकोण करने का एक बेहतर तरीका है?

mainDir <- "c:/path/to/main/dir" subDir <- "outputDirectory" if (file.exists(subDir)){ setwd(file.path(mainDir, subDir)) } else { dir.create(file.path(mainDir, subDir)) setwd(file.path(mainDir, subDir)) } 

Solutions Collecting From Web of "निर्देशिका के अस्तित्व की जाँच करें और यदि मौजूद नहीं है तो बनाएं"

showWarnings = FALSE उपयोग करें showWarnings = FALSE :

 dir.create(file.path(mainDir, subDir), showWarnings = FALSE) setwd(file.path(mainDir, subDir)) 

अगर निर्देशिका पहले से मौजूद है, तो dir.create() क्रैश नहीं करता, यह केवल एक चेतावनी प्रिंट करता है। इसलिए यदि आप चेतावनियों को देखकर रह सकते हैं, तो ऐसा करने में कोई समस्या नहीं है:

 dir.create(file.path(mainDir, subDir)) setwd(file.path(mainDir, subDir)) 

16 अप्रैल, 2015 तक, R 3.2.0 जारी करने के साथ, dir.exists() नामक एक नया फ़ंक्शन dir.exists() । इस फ़ंक्शन का उपयोग करने के लिए और यदि वह मौजूद नहीं है तो निर्देशिका बनाएं, तो आप इसका उपयोग कर सकते हैं:

 ifelse(!dir.exists(file.path(mainDir, subDir)), dir.create(file.path(mainDir, subDir)), FALSE) 

यह FALSE हो जाएगी यदि निर्देशिका पहले से मौजूद है या दुर्गम है, और TRUE अगर यह मौजूद नहीं है लेकिन सफलतापूर्वक बनाया गया था

ध्यान दें कि डायरेक्टरी मौजूद है, बस यह जांचने के लिए कि आप उपयोग कर सकते हैं

 dir.exists(file.path(mainDir, subDir)) 

सामान्य संरचना के संदर्भ में मैं निर्देशिका निर्माण के संबंध में निम्नलिखित संरचना की सिफारिश करेगा। यह सबसे संभावित मुद्दों को कवर करेगा और डायरेक्टरी निर्माण के साथ किसी भी अन्य मुद्दे को dir.create कॉल द्वारा पता लगाया जाएगा।

 mainDir <- "~" subDir <- "outputDirectory" if (file.exists(paste(mainDir, subDir, "/", sep = "/", collapse = "/"))) { cat("subDir exists in mainDir and is a directory") } else if (file.exists(paste(mainDir, subDir, sep = "/", collapse = "/"))) { cat("subDir exists in mainDir but is a file") # you will probably want to handle this separately } else { cat("subDir does not exist in mainDir - creating") dir.create(file.path(mainDir, subDir)) } if (file.exists(paste(mainDir, subDir, "/", sep = "/", collapse = "/"))) { # By this point, the directory either existed or has been successfully created setwd(file.path(mainDir, subDir)) } else { cat("subDir does not exist") # Handle this error as appropriate } 

यह भी ध्यान रखें कि यदि ~/foo मौजूद नहीं है, तो dir.create('~/foo/bar') को कॉल विफल होगा जब तक कि आप recursive = TRUE निर्दिष्ट नहीं करते हैं।

निर्देशिका के अस्तित्व की जांच करने के लिए file.exists () का उपयोग मूल पोस्ट में एक समस्या है। अगर सबडीर में मौजूदा फ़ाइल का नाम शामिल है (केवल एक पथ के बजाय), file.exists () TRUE को वापस करेगा, लेकिन setwd () को कॉल विफल होगा क्योंकि आप फ़ाइल को इंगित करने के लिए कार्यशील निर्देशिका सेट नहीं कर सकते।

मैं file_test (op = "-d", subDir) के उपयोग की सिफारिश करता हूं, जो subDir एक मौजूदा निर्देशिका है अगर "TRUE" लौटाएगा, लेकिन FALSE अगर सबडीर एक मौजूदा फ़ाइल या एक गैर-मौजूद फ़ाइल या निर्देशिका है। इसी प्रकार, एक फाइल की जांच सेशन = "- f" के साथ पूरा किया जा सकता है।

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

तो, निम्न समाधान पर विचार करें, जहां कुछ यूनिकटैग केवल नाम के लिए एक प्रोग्रामर-परिभाषित उपसर्ग है, जिससे यह संभव नहीं है कि एक ही नाम के साथ एक विकल्प पहले से मौजूद है। (उदाहरण के लिए, यदि आप "फ़िलर" नामक पैकेज विकसित कर रहे थे, तो आप filer.mainDir और filer.subDir का उपयोग कर सकते हैं)।

निम्नलिखित कोड का उपयोग विकल्प को सेट करने के लिए किया जाएगा जो बाद में अन्य स्क्रिप्ट में उपयोग के लिए उपलब्ध हैं (इस प्रकार एक स्क्रिप्ट में setwd () का उपयोग करने से बचने के लिए), और आवश्यक होने पर फ़ोल्डर बनाने के लिए:

 mainDir = "c:/path/to/main/dir" subDir = "outputDirectory" options(someUniqueTag.mainDir = mainDir) options(someUniqueTag.subDir = "subDir") if (!file_test("-d", file.path(mainDir, subDir)){ if(file_test("-f", file.path(mainDir, subDir)) { stop("Path can't be created because a file with that name already exists.") } else { dir.create(file.path(mainDir, subDir)) } } 

इसके बाद, उप-डायरेयर में फ़ाइल को हेरफेर करने के लिए आवश्यक किसी भी बाद की स्क्रिप्ट में, आप ऐसा कुछ इस्तेमाल कर सकते हैं:

 mainDir = getOption(someUniqueTag.mainDir) subDir = getOption(someUniqueTag.subDir) filename = "fileToBeCreated.txt" file.create(file.path(mainDir, subDir, filename)) 

यह समाधान उपयोगकर्ता के नियंत्रण में काम कर रहे निर्देशिका को छोड़ देता है।

मुझे 2.15.3 आर आर के साथ एक मुद्दा था, जिससे एक साझा नेटवर्क ड्राइव पर बार-बार पेड़ की संरचना बनाने की कोशिश करते समय मुझे अनुमति त्रुटि मिलती है।

इस अजीबता के आसपास पाने के लिए मैन्युअल रूप से संरचना बनाते हैं;

 mkdirs <- function(fp) { if(!file.exists(fp)) { mkdirs(dirname(fp)) dir.create(fp) } } mkdirs("H:/foo/bar") 

यह जानने के लिए कि कोई पथ एक वैध निर्देशिका है:

 file.info(cacheDir)[1,"isdir"] 

file.info अंत पर एक स्लेश के बारे में परवाह नहीं है

file.exists । Windows पर file.exists एक निर्देशिका के लिए असफल हो जायेगी यदि वह स्लैश में समाप्त हो जाती है, और उसके बिना सफल होती है। इसलिए इसका निर्धारण नहीं किया जा सकता है कि पथ एक निर्देशिका है या नहीं।

 file.exists("R:/data/CCAM/CCAMC160b_echam5_A2-ct-uf.-5t05N.190to240E_level1000/cache/") [1] FALSE file.exists("R:/data/CCAM/CCAMC160b_echam5_A2-ct-uf.-5t05N.190to240E_level1000/cache") [1] TRUE file.info(cacheDir)["isdir"] 

यह सरल जांच है , और डीआईआर बनाता है अगर मौजूद नहीं है:

 ## Provide the dir name(ie sub dir) that you want to create under main dir: output_dir <- file.path(main_dir, sub_dir) if (!dir.exists(output_dir)){ dir.create(output_dir) } else { print("Dir already exists!") }