关于用代码行来进行Pajek操作的简要说明
五色石(男儿血,化五色石,补南天裂。)
Pajek并不直接提供写代码进行操作的功能,但是它提供了这种功能的接口和可能性。在以下资源中介绍了如何使用R软件调用Pajek完成操作的过程。 http://vlado.fmf.uni-lj.si/pub/networks/pajek/howto/execute.htm http://pajek.imfm.si/doku.php?id=faq:run2 http://vlado.fmf.uni-lj.si/pub/networks/pajek/howto/HowToR.htm 本人曾想要写个仔细的案例出来给大家参考,但发现自己居然连一个整块的空闲时间都安排不出来。于是只能先把资源贴出来给大家,如果有什么问题,可以在接着问。 这里简要说一下操作的过程。 在Pajek的安装路径下,每次打开Pajek操作都会生成一个.log文件。例如log1.log、log2.log。大概最多可以有五十个(我本人没有观察过,有兴趣的可以试试看是不是有数量限制)。这个log文件是在Pajek每次打开并进行操作完毕之后记录下来的。举例来说,如果你打开Pajek,选择Create Random Network指令,条件设置为100个顶点,50条边,无multiple lines。执行后Pajek会生成一个网络文件。然后为这个网络计算点度degree,并保存为到路径E:\lf\desktop\degree.net。最后关闭Pajek。那么打开编号最大的那个.log文件(即这次Pajek操作所生成的.log文件,可以用记事本打开),会显示如下结果:(#后面的是我添加的附注) ------------------------------------------------------------------------------------------------- NETBEGIN 1 #以上是Pajek打开主界面的统一指令,.net begin (网络打开) CLUBEGIN 1 # .clu begin (分区打开) PERBEGIN 1 # permutation begin CLSBEGIN 1 # cluster begin HIEBEGIN 1 #hierarchy begin VECBEGIN 1 # vector begin Msg Erdos-Renyi random network generator #message N 1 RNDNFF [50] (100) #产生编号为1的网络,条件为100个点,50条边。 Msg All degree centrality of 1. Erdos-Renyi random network [50] (100) C 1 DEGC 1 [2] (100) #计算N1的所有点度 Msg Saving partition to file --- E:\lf\desktop\PajekTest\degree.clu C 1 WC "E:\lf\desktop\PajekTest\degree.clu" (100) #把点度保存到指定文件中 #最后一行可加上EXIT来关闭Pajek界面 --------------------------------------------------------------------------------------------------- 从这个.log文件中可以发现,Pajek的命令行语句不容易自行编制。那如果想要让Pajek按照自己的意愿完成批量操作,但又不想用Pajek里面的宏指令,怎么办呢? 最简单的方法是自己先用一个简单的网络进行所需要的操作,把.log里面的指令记下来,然后。修改.log里面的参数,例如100个点改成500000个顶点。再把.log文件改名为Pajek.log。(请注意.......)那么当再次启动Pajek时,它会自动检测有没有Pajek.log文件,如果有,就直接执行该文件中的指令。注意的是,如果你不需要在执行完Pajek.log文件后还开着Pajek的界面。那么可以在.log文件的最后一行加上EXIT指令,从而执行完所有指令后关闭Pajek。 到了这里,就有人会说,那我还是不知道怎么从其他软件里面(比方说R软件)来调用Pajek啊。那接下来的操作就解决这个问题。 首先,需要制作好Pajek.log文件放在Pajek路径下(请注意,今后如果想要正常启动Pajek,请一定要把这个Pajek.log文件改名或者删掉。否则每次启动Pajek,它只会执行Pajek.log的指令) 然后,在Pajek路径下放置一个用文本编辑器编辑好的文件runPajek.bat。这个文件中的内容如下: --------------------------------------------------------------------------------------------------------- cd D:\NetworkAnalysis\Pajek205\Pajek pajek D:\NetworkAnalysis\Pajek205\Pajek\mysettings.ini D:\NetworkAnalysis\Pajek205\Pajek.log --------------------------------------------------------------------------------------------------------- 在这个文件中,cd D:\NetworkAnalysis\Pajek205\Pajek表示执行的时候采用该路径下的Pajek.exe启动Pajek程序。 D:\NetworkAnalysis\Pajek205\Pajek\mysettings.ini 表明启动Pajek的时候要使用mysettings.ini文件来初始化Pajek的一些基本设置(这个指令我们可以先忽略)。 D:\NetworkAnalysis\Pajek205\Pajek.log 表明首先执行Pajek.log文件里的指令。 这样,到此为止我们已经为Pajek设置了runPajek.bat和Pajek.log两个文件。 接着,启动R软件,在其中键入如下指令(请注意斜杠要调整方向,因R里面的路径符号与Windows不同): system("D:/NetworkAnalysis/Pajek205/Pajek/runPajek.bat",invisible=TRUE,wait=FALSE) 这个代码的意思是执行操作系统中的D:/NetworkAnalysis/Pajek205/Pajek/路径下的runPajek.bat,操作过程不用显示(invisible=TRUE)。通过runPajek.bat,调用了Pajek.log,而Pajek.log的最后一行是EXIT。因此,执行完之后,只会在指定文件夹下面发现生成的点度文件,而不会看到Pajek界面。 到这一步,完成了从R调用Pajek的说明。如果说只是为了进行这种简单的操作,实在没有必要做这种复杂的事情。但是,请设想一下,如果你有10000个网络文件保存在电脑里(或者你索性就是要生成10000个随机网络),手工把这么多文件一个一个打开到Pajek中进行操作太费力啦。这时候,就可以借助上述接口,进行批量操作了。 小结: 用一个简单的示范网络进行操作-->获取.log文件中的指令,并进行修改-->制作Pajek.log和runPajek.bat文件-->到R软件里面调用。
你的回复
回复请先 登录 , 或 注册相关内容推荐
最新讨论 ( 更多 )
- ucinet 算出来的constraint>1 (little star)
- ucinet中EI指数 (豆友32NuyGnAdI)
- pajek交流,ucinet交流,gephi交流,复杂网络分析,社会网络... (微rebol1985)
- 求助!连锁董事网络分析相关的数据处理 (pyl)
- 救命,3200×3100的二模矩阵怎么转为一模矩阵 (豆友5TLfsjRdOY)