2017-03-15 5 views
0

ファイルは20000行と3列のHere you can find a sample from the out1.txt fileで構成されています。私はRに線をインポートしようとしている各20行(私は1000部に各部分は20行で構成する20000行を分割することを意味します)ので、最初に私は別々に各20行を読み取る必要があります直径関数テキストファイル内のデータの直径を探すR

その後、私はグラフとして各部分を読んで直径を見つける必要があります。

20000行を含むファイルの名前は(out1.txt)で、100部の直径を書き込むために使用するファイルの名前はoutfileです(outfileはそれぞれ100行で構成されますライン)out1.txtで20行の直径を表す

コードは次のとおりです。

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トラブルエラーが、私は、それの意味が正確に何であるか、エラーを理解することはできません。

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

アドバイスや助けてくれてありがとう

+1

むしろクイックフィックス、 'writeLinesなどの画像 –

+0

よりコピーpastableテキストなどのデータのサンプルに入れてください(as.character(C)を、CON = OUTFILE)は'行う必要があり、それ –

+0

はい、また、 'igraph'パッケージに' get.data.frame'関数があり、その周りに '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を使用しているので、ループを実行するたびにきれいなファイルから始めなければならないという問題があると思われます。 –

関連する問題