2017-03-15 1 views
0

파일이 20000 행과 3 열 Here you can find a sample from the out1.txt file으로 구성되어 있습니다. 나는 R에 선을 가져 오려고 시도하고 나서 각 20 줄의 지름을 찾는다. (즉, 20000 줄을 1000 부분으로 나눠서 각 부분을 20 줄로 나눈다.) 먼저 각 20 줄을 따로 읽고 직경 함수를 적용해야한다. in R.텍스트 파일에서 데이터 직경을 찾으십시오 R

그 후 각 부분을 그래프로 읽은 다음 직경을 찾아야합니다.

20000 줄을 포함하는 파일의 이름은 (out1.txt)이며 100 개의 부분에 대한 직경을 쓰는 데 사용할 파일 이름은 outfile입니다 (outfile은 각각 100 줄로 구성됩니다.

setwd("Desktop") 
outfile<- file('outfile', 'w') 
library("igraph") 
X<-read.table("out1.txt") 
l=1; 
t=1; 
while (t<=20000){ 
for (i in t:t+19){ 
for (k in 1:3) { 
T<- matrix(nrow=20, ncol=3); 
T[l,k]<-X[i,k]; 
} 
l=l+1; 
} 
t=t+20; 
l=1; 
gg<-graph.data.frame(T,directed=FALSE) 
C<-diameter(gg,directed=FALSE,weights=NULL) 
writeLines(C,con=outfile) 
} 

I 문제 오류하지만 정확히 오류의 의미가 무엇인지 이해할 수 없다 : 라인은 out1.txt의 20 개 라인)

코드가의 직경을 나타냅니다

Error in writeLines(C, con = outfile) : invalid 'text' argument 

조언이나 도움을 많이 주셔서 고마워요.

+1

오히려 빠른 수정,'writeLines으로 이미지 –

+0

이상 복사하여 붙여 넣을 텍스트로 데이터의 샘플에 넣어주세요 (as.character (C)를 사기 = OUTFILE)이'어떻게해야 그것을 –

+0

예, 또한'get.data.frame' 함수가 있는데,'igraph' 패키지에'diameter'를 두었습니다. –

답변

0

20 블록을 원하기 때문에 코드를 단순화 할 수 있다고 생각합니다. 그렇지 않으면 결과를 추가해야 할 필요가 있다고 생각합니다. 그렇지 않으면 루프마다 루프를 덮어 쓰게됩니다. . 이 시도 :

DF <- data.frame(C1=sample(1:1000,200), C2=sample(1:1000,200)) 
outfile<- file('outfile.txt') 
for(i in seq(1,200, 20)){ 
    for(j in seq(20,200, 20)){ 
    g <- as.character(diameter(graph.data.frame(DF[i:j, ], directed = F),directed=FALSE,weights=NULL)) 
    write.table(g,"outfile.txt", append = T, col.names = F, row.names = F) 
    } 
} 
close(outfile) 
+0

예, 작동하지만 잘못된 대답을 제공합니다 !! 나는 처음 20 줄을 가져 갔고 그것들을위한 지름을 단독으로 찾았습니다. 그것은 5 였지만이 코드를 사용하면 1입니다 !! – Noah16

+0

필자는'igraph '와'as.character '사이의 변환에 문제가 있으며 코드의 논리와 관련이 없다고 생각합니다. 제발,'as.integer'로 시도하십시오. –

+0

나는 스스로를 두 번 확인 했으므로 변환 과정에서 실수 나 오류가 발생하지 않습니다. 나는 우리가 append를 사용하고 있기 때문에 루프를 실행할 때마다 깨끗한 파일로 시작해야한다는 것이 문제라고 생각한다. –

관련 문제