How would it be possible in the example below to skip the step of writing to file "test.txt", i.e. assign the cat-result to an object, and still achieve the same end result?
I thought I'd include the full example to give background to my problem.
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   Results in:
  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 
                As a more general solution, you can use the capture output function. It results in a character vector with elements corresponding to each line of the output.
your example:
test2<-capture.output(cat(test))   here is a multi-line example:
> 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] ""     
                        Instead of cating to a file, why not use the paste command to generate a string instead?
> 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"   Now instead of doing a cat then readlines you can just pass this string directly into strsplit.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With