मुझे एक टेम्पलेट फ़ाइल test.txt
पढ़ने की आवश्यकता है, सामग्री को संशोधित करें और फिर डिस्क पर लिखें foo`i`.in
(i
एक पुनरावृत्ति संख्या के साथ एक संशोधित प्रति)। चूंकि मुझे इस ऑपरेशन को बड़ी संख्या में करने की आवश्यकता है (दस लाख बार असामान्य नहीं होगा), कुशल समाधानों को प्राथमिकता दी जाएगी। टेम्पलेट फ़ाइल इस तरह है:कुछ संशोधनों के बाद एक टेम्पलेट फ़ाइल पढ़ना और इसे डिस्क पर लिखना
1
bar.out
70.000000000000000
2.000000000000000
14.850000000000000
8000.000000000000000
120.000000000000000
60.000000000000000
0.197500000000000
0.197500000000000
2.310000000000000
0.200000000000000
0.000000000000000
1.000000000000000
0.001187700000000
22.000000000000000
1.400000000000000
1.000000000000000
0.010000000000000
100
0.058600000000000
-0.217000000000000
0.078500000000000
-0.110100000000000
30
500.000000000000000
T
मुझे बस कुछ पंक्तियों को संशोधित करने की आवश्यकता नहीं है। विशेष रूप से, मुझे bar.out
को bar`i`.out
संशोधित करने की आवश्यकता है जहां i
एक पुनरावृत्ति सूचकांक है। मैं भी निम्न मान के साथ कुछ संख्यात्मक लाइनों संशोधित करने की आवश्यकता:
parameters <- data.frame(index = c(1:10, 13:16, 21:22), variable = c("P1",
"P2", "T1", "s", "D", "L", "C1", "C2", "VA",
"pw", "m", "mw", "Cp", "Z", "ff_N", "ff_M"),
value = c(65, 4, 16.85, 7900, 110, 60, 0.1975, .1875, 2.31,
0.2, 0.0011877, 22.0, 1.4, 1.0, 0.0785, -0.1101))
सभी अन्य लाइनों, एक ही रहना चाहिए अंतिम पंक्ति T
भी शामिल है।
parameters$value
में सभी महत्वपूर्ण अंक
foo1.in
में शामिल किए गए हैं) होने
foo1.in
नामक एक पाठ फ़ाइल है
1
bar1.out
65.000000000000000
4.000000000000000
16.850000000000000
7900.000000000000000
110.000000000000000
60.000000000000000
0.197500000000000
0.187500000000000
2.310000000000000
0.200000000000000
0.000000000000000
1.000000000000000
0.001187700000000
22.000000000000000
1.400000000000000
1.000000000000000
0.010000000000000
100
0.058600000000000
-0.217000000000000
0.078500000000000
-0.110100000000000
30
500.000000000000000
T
foo.in
और bar.out
संशोधित करना आसान है:
template <- "test.txt"
infile <- "foo.in"
string1 <- "bar.out"
iteration <- 1
# build string1
elements <- strsplit(string1, "\\.")[[1]]
elements[1] <- paste0(elements[1], iteration)
string1 <- paste(elements, collapse = ".")
# build infile name
elements <- strsplit(infile, "\\.")[[1]]
elements[1] <- paste0(elements[1], iteration)
infile<- paste(elements, collapse = ".")
अब, मैं टेम्पलेट फ़ाइल पढ़ सकते हैं और इरादा लाइनों केवल संशोधित करना चाहते हैं। मुझे पहली समस्या का सामना करना पड़ता है कि read.table
केवल डेटा फ्रेम आउटपुट करता है। चूंकि मेरी टेम्पलेट फ़ाइल में एक ही कॉलम में संख्याएं और स्ट्रिंग हैं, अगर मैं read.table
के साथ सभी फाइलें पढ़ता हूं तो मुझे एक वर्ण कॉलम (मुझे लगता है) प्राप्त होगा। मैं केवल सांख्यिक मानों मैं में दिलचस्पी रखता हूँ पढ़कर समस्या को दरकिनार:
# read template file
temp <- read.table(template, stringsAsFactors = FALSE, skip = 2, nrows = 23)$V1
lines_to_read <- temp[length(temp)]
# modify numerical parameter values
temp[parameters$index] <- parameters$value
हालांकि, अब मैं foo1.in
लिखने के लिए कैसे पता नहीं है। अगर मैं write.table
का उपयोग करता हूं, तो मैं केवल डिस्क पर मैट्रिक्स या डेटाफ्रेम लिख सकता हूं, इसलिए मैं एक फ़ाइल नहीं लिख सकता जिसमें एक ही कॉलम में संख्याएं और स्ट्रिंग शामिल हैं। इसे कैसे हल किया जा सकता है?
संपादित करें मैं इस समस्या पर थोड़ी सी पृष्ठभूमि प्रदान करता हूं, यह बताने के लिए कि मुझे इस फ़ाइल को इतनी बार क्यों लिखना है। तो, विचार कंप्यूटर कोड (एक निष्पादन योग्य) के अंशांकन मानकों के लिए Bayesian अनुमान प्रदर्शन करना है। मूल विचार सरल है: आपके पास एक ब्लैक बॉक्स (वाणिज्यिक) कंप्यूटर कोड है, जो एक शारीरिक समस्या को अनुकरण करता है, उदाहरण के लिए एक फेम कोड। चलो इस कोड जो कहते हैं। एक इनपुट फ़ाइल को देखते हुए, जो भौतिक प्रणाली की प्रतिक्रिया के लिए भविष्यवाणी करता है। अब, मेरे पास इस प्रणाली की प्रतिक्रिया के लिए वास्तविक प्रयोगात्मक माप भी हैं। मैं जो के इनपुट के मूल्यों को ढूंढना चाहता हूं जैसे कि जो के आउटपुट और वास्तविक माप के बीच का अंतर कम हो गया है (वास्तव में चीजें काफी अलग हैं, लेकिन यह सिर्फ एक विचार देने के लिए है)। अभ्यास में, इसका मतलब है कि मुझे विभिन्न इनपुट फ़ाइलों के साथ कई बार जो चलाने की ज़रूरत है, और इसे इनपुट मानों को तुरंत ढूंढें जो जो की भविष्यवाणी और प्रयोगात्मक परिणामों के बीच "विसंगति" को कम करते हैं। संक्षेप में:
- मैं इनपुट फ़ाइलों की सामग्री को कई इनपुट (पाठ) उत्पन्न पहले से
- मैं नहीं जानता कि फाइल की जरूरत है। संख्यात्मक पैरामीटर को पुनरावृत्ति के दौरान एक पुनरावृत्ति के दौरान संशोधित किया जाता है।
- मुझे प्रत्येक इनपुट के लिए जो के आउटपुट को पढ़ने की भी आवश्यकता है। यह वास्तव में एक और समस्या है और मैं शायद इस बिंदु पर एक विशिष्ट प्रश्न लिखूंगा।
तो, जबकि जो एक वाणिज्यिक कोड है जिसके लिए मैं केवल निष्पादन योग्य (कोई स्रोत) है, बायेसियन अनुमान आर में किया जाता है, क्योंकि आर (और, यह महत्वपूर्ण कार्यों के लिए अजगर) के लिए उत्कृष्ट उपकरण है इस तरह के अध्ययन करते हैं।
प्रत्येक पुनरावृत्ति पर डिस्क पर एक सादे पाठ फ़ाइल को पढ़ने और लिखना आर वस्तु में चीजों को संग्रहित करने की तुलना में अक्षम होगा। आपका अनुमान वेक्टर छोटा है, इसलिए मुझे नहीं लगता कि डिस्क पर डालने से सीमित रैम के बारे में चिंताओं को उचित ठहराया जाएगा। आप अनुकूलन करने के लिए कुछ गैर-आर चीज का उपयोग कर रहे हैं लेकिन आर में पुनरावृत्ति भाग को संभालने? ब्याज के लिए – Frank
@ फ्रैंक धन्यवाद। यह थोड़ा जटिल है: मैं पृष्ठभूमि प्रदान करने के लिए सवाल संपादित करूंगा, उम्मीद है कि यह और स्पष्ट हो जाएगा। – DeltaIV
क्या सभी इनपुट फ़ाइलों के लिए 'पैरामीटर' वैरिएबल समान है, या यह इनपुट फ़ाइल (या अन्यत्र) में किसी चीज़ के आधार पर बदलता है? प्रत्येक इनपुट फ़ाइल के लिए – r2evans