2017-03-15 23 views
0

我有一个由20000行和3列Here you can find a sample from the out1.txt file组成的文件。我试图导入到R的线,然后找到每20线的直径(我的意思是将20000线分成1000部分,每部分包含20线),所以首先我需要分别读取每20条线,然后应用直径函数在R.使用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) 
} 

我麻烦了一个错误,但我不明白究竟是什么,错误的含义:

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

非常感谢您的任何建议或帮助

+1

请将数据复制pastable文本,而不是图像 –

+0

作为速战速决,'writeLines的样品(as.character(C),CON = OUTFILE)'应该这样做 –

+0

是,还有'get.data.frame'函数,在'igraph'包中,将''直径'包裹在它周围。 –

回答

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,所以每次运行循环时我们都必须从一个干净的文件开始。 –