سؤال

وكيف سيكون من الممكن في المثال التالي لتخطي خطوة من الكتابة إلى ملف "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
هل كانت مفيدة؟

المحلول

وبدلا من cating إلى ملف، لماذا لا تستخدم الأمر 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.

نصائح أخرى

وكحل أعم، يمكنك استخدام وظيفة الانتاج القبض عليه. أنه يؤدي إلى ناقل شخصية مع عناصر المقابلة لكل خط الانتاج.

والمثال الخاص بك:

test2<-capture.output(cat(test))

وهنا مثال متعدد الخطوط:

> 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] ""    

وحاول

> 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)

وهناك أيضا بيان تعيين الذي يسمح لك لبناء اسم ووضع كائن لذلك. من المفيد جدا إذا كنت ترغب في تكرار مجموعة من الاختبارات وتسميتها مع القيم الديناميكية.

وإسناد ( "ماري"، لصق (اختبار، سبتمبر = "\ ن"))

وسوف تعيين بيان لصق في ماري. ومع ذلك نقول لكم تم تشغيل مجموعة من انحدارات ويريد الأشياء الانحدار الخاص يسميه تنبؤ. هل يمكن أن تفعل شيئا من هذا القبيل

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

والتي من شأنها أن تعطيك الكائن

وmyRegressionPredictorName كما كنت النموذج الخطي.

جرب الرموز التالية:

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

وبعد ذلك يمكنك فتح ملف txt "summary.txt" لرؤية النتائج.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top