문제

아래 예제에서 "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
도움이 되었습니까?

해결책

대신에 cat파일에 in을 사용하지 않는 이유는 무엇입니까? 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.

다른 팁

보다 일반적인 솔루션으로 캡처 출력 기능을 사용할 수 있습니다. 그것은 출력의 각 라인에 해당하는 요소가있는 문자 벡터를 초래합니다.

your example:

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)

이름을 작성하고 객체를 설정할 수있는 지정 문도 있습니다. 많은 테스트를 반복하고 동적 값으로 이름을 지정하려면 매우 유용합니다.

할당 ( "mary", paste (test, sep = " n"))

페이스트 명세서를 Mary에게 할당합니다. 그러나 여러분이 많은 회귀를 실행하고 있으며 예측 변수가 지명 한 회귀 개체를 원했습니다. 당신은 같은 일을 할 수 있습니다

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