我的目标是使用R:ndtv
,network
和networkDynamic
包中的三个包进行动态可视化。
我创建了一个dataset,其中包含根据workshop for Network Dynamic Temporal Visualizations(第7页)中此示例数据集排序的信息。
根据网络动态手册第49页,上传数据集并将其转换为networkDynamic对象的一种方法如下:
rawEdges<-read.table(paste(path.package("networkDynamic"),"/enron_timebased3.tsv", sep=''),header=TRUE)
但是,当我试图跑步时
animation.render(rawEdges)
R抛出错误信息:
第一个参数必须是网络对象。
要解决此问题,我创建了一个网络对象:
net<-network(rawEdges)
并尝试:
animation.render(net, rawEdges)
新错误消息:
错误'$&lt; - .data.frame'(' tmp ',“initial.coords”,值= c(0,0,0,:替换有34行,数据有26)
有谁知道如何解决这个问题?
答案 0 :(得分:2)
认为您的示例有几个问题:
networkDynamic
对象,而不是网络
对象render.animation()
而不是animation.render()
首先,让我们设置一些我们可以加载的示例数据。只需要示例数据的前4列:
# text version of the example data
text<-"onset terminus tail head
9/6/2000 9/7/2000 mmmarcantel@equiva.com matthew.lenhart@enron.com
9/6/2000 9/7/2000 stephen.harrington@enron.com matthew.lenhart@enron.com
9/6/2000 9/7/2000 shelliott@dttus.com matthew.lenhart@enron.com
9/6/2000 9/7/2000 jilallen@dttus.com matthew.lenhart@enron.com
5/7/2001 5/8/2001 ken.shulklapper@enron.com matthew.lenhart@enron.com
9/6/2000 9/7/2000 eric.bass@enron.com matthew.lenhart@enron.com
9/6/2000 9/7/2000 shelliott@dttus.com matthew.lenhart@enron.com
9/6/2000 9/7/2000 bryan.hull@enron.com matthew.lenhart@enron.com
9/6/2000 9/7/2000 jilallen@dttus.com matthew.lenhart@enron.com
9/6/2000 9/7/2000 shelliott@dttus.com matthew.lenhart@enron.com
9/6/2000 9/7/2000 brook@pdq.net matthew.lenhart@enron.com
9/5/2000 9/6/2000 tlenhart@corealty.com matthew.lenhart@enron.com
9/5/2000 9/6/2000 patrick.ryder@enron.com matthew.lenhart@enron.com
9/5/2000 9/6/2000 eric.bass@enron.com matthew.lenhart@enron.com
9/5/2000 9/6/2000 mmmarcantel@equiva.com matthew.lenhart@enron.com
5/7/2001 5/8/2001 tlenhart@corealty.com matthew.lenhart@enron.com
9/5/2000 9/6/2000 tlenhart@corealty.com matthew.lenhart@enron.com
9/5/2000 9/6/2000 tlenhart@corealty.com matthew.lenhart@enron.com
9/5/2000 9/6/2000 paul.lucci@enron.com matthew.lenhart@enron.com
9/5/2000 9/6/2000 jilallen@dttus.com matthew.lenhart@enron.com
9/5/2000 9/6/2000 tlenhart@corealty.com matthew.lenhart@enron.com
9/5/2000 9/6/2000 paul.lucci@enron.com matthew.lenhart@enron.com
9/5/2000 9/6/2000 bryan.hull@enron.com matthew.lenhart@enron.com
9/5/2000 9/6/2000 shelliott@dttus.com matthew.lenhart@enron.com
8/31/2000 9/1/2000 bryan.hull@enron.com matthew.lenhart@enron.com
8/31/2000 9/1/2000 tlenhart@corealty.com matthew.lenhart@enron.com"
# write out the example data to an example input file
inputFile<-tempfile()
cat(text,file=inputFile)
现在,加载网络动态库
library(networkDynamic)
# read in tab-delimited example input file
timeData<-read.csv(inputFile,sep = "\t",stringsAsFactors = FALSE)
# check that it was loaded correctly
timeData
# convert the date formats into a numeric time (milliseconds)
timeData$onset<-as.numeric(as.POSIXct(timeData$onset,format='%m/%d/%Y'))
timeData$terminus<-as.numeric(as.POSIXct(timeData$terminus,format='%m/%d/%Y'))
# create a table of email address to map to numeric ids
emails<-unique(c(timeData$head,timeData$tail))
#covert ids
timeData$head<- match(timeData$head,emails)
timeData$tail<- match(timeData$tail,emails)
# convert to networkDynamic object
enronDyn<-networkDynamic(edge.spells=timeData)
# copy in the network names
network.vertex.names(enronDyn)<-emails
# load ndtv library
library(ndtv)
# compute the animation at 30-day interval
compute.animation(enronDyn,slice.par=list(start=967705200,end=989305200,interval=2592000,aggregate.dur=2592000,rule='latest'))
# render out the animation
render.animation(enronDyn)
ani.replay()
但是,您的输入数据对我来说有点滑稽。我非常确定原始安然电子邮件数据的时间戳比发送电子邮件的日期更精确,而且发送每封电子邮件不需要一整天?如果您可以找到具有更精确时间戳的数据版本,则可以更灵活地呈现和分析动态事件。例如,您将知道每天发送电子邮件的顺序等。