2009-09-10 14 views
17

"test.txt" फ़ाइल में लिखने के चरण को छोड़ने के लिए नीचे दिए गए उदाहरण में कैसे संभव होगा, यानी किसी ऑब्जेक्ट को बिल्ली-परिणाम असाइन करें, और फिर भी वही अंतिम परिणाम प्राप्त करें?किसी वस्तु को बिल्ली के आउटपुट को कैसे असाइन करें?

मैंने सोचा कि मैं अपनी समस्या को पृष्ठभूमि देने के लिए पूरा उदाहरण शामिल करूंगा। में

test <- c("V 1", "x", "1 2 3", "y", "3 5 8", "V 2", "x", "y", "V 3", "y", "7 2 1", "V 4", "x", "9 3 7", "y") 

# Write selection to file 
cat(test, "\n", file="test.txt") 
test2 <- readLines("test.txt") 
test3 <- strsplit(test2, "V ")[[1]][-1] 

# Find results 
x <- gsub("([0-9]) (?:x)?([0-9] [0-9] [0-9])?.*", "\\1 \\2 ", test3, perl = TRUE) 
y <- gsub("([0-9]).* y ?([0-9] [0-9] [0-9])?.*", "\\1 \\2 ", test3, perl = TRUE) 

# Eliminate tests with no results 
x1 <- x[regexpr("[0-9] ([^0-9]).*", x) == -1] 
y1 <- y[regexpr("[0-9] ([^0-9]).*", y) == -1] 

# Dataframe of results 
xdf1 <- read.table(textConnection(x1), col.names=c("id","x1","x2","x3")) 
ydf1 <- read.table(textConnection(y1), col.names=c("id","y1","y2","y3")) 
closeAllConnections() 

# Dataframe of tests with no results 
x2 <- x[regexpr("[0-9] ([^0-9]).*", x) == 1] 
y2 <- y[regexpr("[0-9] ([^0-9]).*", y) == 1] 

df1 <- as.integer(x2[x2 == y2]) 
df1 <- data.frame(id = df1) 

# Merge dataframes 
results <- merge(xdf1, ydf1, all = TRUE) 
results <- merge(results, df1, all = TRUE) 
results 

परिणाम:

id x1 x2 x3 y1 y2 y3 
1 1 1 2 3 3 5 8 
2 2 NA NA NA NA NA NA 
3 3 NA NA NA 7 2 1 
4 4 9 3 7 NA NA NA 

उत्तर

13

के बजाय cat एक फाइल करने के लिए प्रयास करें ing, क्यों paste आदेश का उपयोग नहीं के बजाय एक स्ट्रिंग उत्पन्न करने के लिए?

> paste(test, collapse="\n") 
[1] "V 1\nx\n1 2 3\ny\n3 5 8\nV 2\nx\ny\nV 3\ny\n7 2 1\nV 4\nx\n9 3 7\ny" 

अब बजाय फिर एक cat करने का readlines तुम सिर्फ इस स्ट्रिंग सीधे strsplit में पारित कर सकते हैं।

2

> f <- textConnection("test3", "w") 
> cat(test, "\n", file=f) 
> test3 
[1] "V 1 x 1 2 3 y 3 5 8 V 2 x y V 3 y 7 2 1 V 4 x 9 3 7 y " 
> close(f) 
27

अधिक सामान्य समाधान के रूप में, आप कैप्चर आउटपुट फ़ंक्शन का उपयोग कर सकते हैं। इसका परिणाम एक चरित्र वेक्टर में होता है जिसमें आउटपुट की प्रत्येक पंक्ति के अनुरूप तत्व होते हैं।

अपने उदाहरण:

> out<-capture.output(summary(lm(hwy~cyl*drv,data=mpg))) 
> out 
[1] ""                
[2] "Call:"               
[3] "lm(formula = hwy ~ cyl * drv, data = mpg)"      
[4] ""                
[5] "Residuals:"              
[6] " Min  1Q Median  3Q  Max "      
[7] "-8.3315 -1.4139 -0.1382 1.6479 13.5861 "      
[8] ""                
[9] "Coefficients:"             
[10] "   Estimate Std. Error t value Pr(>|t|) "   
[11] "(Intercept) 32.1776  1.2410 25.930 < 2e-16 ***"   
[12] "cyl   -2.0049  0.1859 -10.788 < 2e-16 ***"   
[13] "drvf   8.4009  1.8965 4.430 1.47e-05 ***"   
[14] "drvr   8.2509  6.4243 1.284 0.200 "   
[15] "cyl:drvf  -0.5362  0.3422 -1.567 0.119 "   
[16] "cyl:drvr  -0.5248  0.8379 -0.626 0.532 "   
[17] "---"                
[18] "Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 " 
[19] ""                
[20] "Residual standard error: 2.995 on 228 degrees of freedom"  
[21] "Multiple R-squared: 0.7524,\tAdjusted R-squared: 0.747 "   
[22] "F-statistic: 138.6 on 5 and 228 DF, p-value: < 2.2e-16 "  
[23] ""  
1

वहाँ भी असाइन बयान है जिसमें आप एक नाम का निर्माण और इसे करने के लिए एक वस्तु स्थापित करने के लिए अनुमति देता है है:

test2<-capture.output(cat(test)) 
यहाँ

एक बहु लाइन उदाहरण है। बहुत उपयोगी यदि आप परीक्षणों का एक समूह फिर से शुरू करना चाहते हैं और उन्हें गतिशील मानों के साथ नामित करना चाहते हैं।

असाइन ("मैरी" पेस्ट (परीक्षण सितम्बर = "\ n"))

मेरी पेस्ट बयान आवंटित करेगा। हालांकि कहते हैं कि आप प्रतिशोध का एक गुच्छा चला रहे थे और भविष्यवाणियों द्वारा नामित आपके प्रतिगमन वस्तुओं को चाहते थे। आप की तरह

assign(paste("myRegression",names(dataframe)[2],sep=""), lm(dataframe$response~dataframe[,2])) 

कुछ है जो आप वस्तु के रूप में आप रेखीय मॉडल

myRegressionPredictorName देना होगा कर सकता है।

1

निम्नलिखित कोड का प्रयास करें:

writeLines(capture.out((summary(lm(hwy~cyl*drv,data=mpg)),con="summary.txt",sep="\n")

तो फिर तुम txt फ़ाइल "summary.txt" अपने परिणाम देखने में खोल सकते हैं।

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