我正在尝试使用该igraph包来绘制(稀疏)加权图.我目前有一个邻接矩阵,但无法获得graph.adjacency识别边权重的功能.
考虑以下随机对称矩阵:
m <- read.table(row.names=1, header=TRUE, text=
" A B C D E F
A 0.00000000 0.0000000 0.0000000 0.0000000 0.05119703 1.3431599
B 0.00000000 0.0000000 -0.6088082 0.4016954 0.00000000 0.6132168
C 0.00000000 -0.6088082 0.0000000 0.0000000 -0.63295415 0.0000000
D 0.00000000 0.4016954 0.0000000 0.0000000 -0.29831267 0.0000000
E 0.05119703 0.0000000 -0.6329541 -0.2983127 0.00000000 0.1562458
F 1.34315990 0.6132168 0.0000000 0.0000000 0.15624584 0.0000000")
m <- as.matrix(m)
Run Code Online (Sandbox Code Playgroud)
为了绘图,首先我必须将这个邻接矩阵变为正确的igraph格式.这应该是相对简单的graph.adjacency.根据我阅读的文档graph.adjacency,我应该做以下事情:
library(igraph)
ig <- graph.adjacency(m, mode="undirected", weighted=TRUE)
Run Code Online (Sandbox Code Playgroud)
但是,它无法识别边缘权重:
str(ig)
# IGRAPH …Run Code Online (Sandbox Code Playgroud) Github开发版的magrittr包含了一些很酷的新功能,但是我并没有完全理解%>%和之间的区别%,%.这只是%>%价值和%,%功能的正式,还是有一些特殊的特点?
我有一个数据框data.在每一行都i分配了一个重量data$ww.现在,我想提出一个样品new_data的 data,按加权df$ww.我试过subset但很慢.
# sample data
data <- data.frame(var1 = log(sample(1:5000)))
ndata <- nrow(data)
maxW <- max(data$var1)
nsample <- 4000
rr <- runif(ndata)
data$ww <- cumsum(exp(data$var1))
new_data <- data[0, ]
i <- 1
while(nrow(new_data) < nsample) {
new_data[i, ] <- subset(data, data$ww > rr[i] * maxW)[1,]
i <- i + 1
}
Run Code Online (Sandbox Code Playgroud)
有更快的方法吗?
IEEE-754算法在不同平台上是否可重现?
我正在测试一些用R编写的代码,它使用随机数.我认为在所有测试平台上设置随机数生成器的种子会使测试可重现,但这似乎不适用于rexp()生成指数分布的随机数.
这是我在32位Linux上得到的:
options(digits=22) ; set.seed(9) ; rexp(1, 5)
# [1] 0.2806184054728815824298
sessionInfo()
# R version 3.0.2 (2013-09-25)
# Platform: i686-pc-linux-gnu (32-bit)
Run Code Online (Sandbox Code Playgroud)
这就是我在64位OSX 10.9上得到的:
options(digits=22) ; set.seed(9) ; rexp(1, 5)
# [1] 0.2806184054728815269186
sessionInfo()
# R version 3.0.2 (2013-09-25)
# Platform: x86_64-apple-darwin10.8.0 (64-bit)
Run Code Online (Sandbox Code Playgroud)
64位Linux提供与64位OSX相同的结果,因此这似乎是32位与64位问题.
让我们假设两个R版本都使用相同的GCC版本编译,并使用相同的(默认R)编译标志,使编译器使用IEEE-754算法.
我的问题是,这可以被视为R中的一个错误吗?或者它只是使用近似有限精度浮点运算的"正常"结果?
我把相同的问题发送到R-devel邮件列表,但是没有在列表中找到答案,只有一个答案是私下的,试图说服我这不是一个错误,我应该忍受它.
这就是IEEE-754关于再现性的说法(来自维基百科):
IEEE 754-1985允许实现中的许多变化(例如某些值的编码和某些异常的检测).IEEE 754-2008已经收紧了其中许多,但仍然存在一些变化(特别是对于二进制格式).可再现性条款建议语言标准应提供编写可重现程序的方法(即,在语言的所有实现中产生相同结果的程序),并描述需要采取哪些措施才能获得可重现的结果.
这是在"建议"下.
我(主观)意见认为这是一个错误,因为IEEE-754标准的重点是具有可重现的,与平台无关的浮点运算.
我有一个双模网络的边缘列表,类似于:
person Event
Amy football_game
Sam picnic
Bob art_show
Run Code Online (Sandbox Code Playgroud)
我想在R中对此进行分析,但看起来我尝试的一切都失败了.将其转换为单模式网络会遇到内存限制,我无法弄清楚如何在igraph或tnet中将其分析为二分.
在igraph中,bipartite.projection给我所有FALSE,在使用的igraph对象上
net <- graph.edgelist(myobject)
Run Code Online (Sandbox Code Playgroud)
在tnet上,我无法将igraph网转换为tnet网,当我尝试使用原始数据框时,它会因图中的重复而拒绝.
因此,以下任何一个的答案将非常感激:
bipartite.mapping功能?很抱歉,如果这些是基本问题,但文档很少.
例:
edgelist <- read.table(text="Person Event
Amy football
Bob picnic
Sam artshow",
header=TRUE)
edgelist <- as.matrix(edgelist)
## Igraph Issues
igraph <- graph.edgelist(edgelist)
typevector <- bipartite.projection(igraph)
# gets all FALSE
edgelist2 <- get.edgelist(igraph)
typevector <- bipartite.projection(edgelist2)
# same thing
## tnet issues
tnet <- as.tnet(edgelist)
# gives error: "There are duplicate events in the edgelist" …Run Code Online (Sandbox Code Playgroud) 问题:我想.csv使用igraph 从存储在文件中的邻接矩阵制作加权无向图,然后对其进行最小生成树和其他算法.
我开始制作一个有10个顶点和5个边的有向图.默认情况下,igraph不允许边缘权重,你必须使用一些对我来说没有意义的属性(类似于igraph_i_set_attribute_table).
有人可以帮我解决这个问题.
void print_vector(igraph_vector_t *v, FILE *f) {
long int i;
for (i=0; i<igraph_vector_size(v); i++) {
fprintf(f, " %li", (long int) VECTOR(*v)[i]);
}
fprintf(f, "\n");
}
int main(int argc, char* argv[])
{
igraph_t g;
igraph_vector_t v;
int ret;
igraph_es_t es;
/* Initialize the vector for edges */
igraph_vector_init(&v,10);
VECTOR(v)[0]=0;VECTOR(v)[1]=1;
VECTOR(v)[2]=1;VECTOR(v)[3]=3;
VECTOR(v)[4]=1;VECTOR(v)[5]=5;
VECTOR(v)[6]=2;VECTOR(v)[7]=3;
VECTOR(v)[8]=2;VECTOR(v)[9]=5;
igraph_create(&g,&v,0,IGRAPH_DIRECTED);
print_vector(&v,stdout);
/* igraph_i_set_attribute_table(&igraph_cattribute_table); */
igraph_vector_destroy(&v);
igraph_destroy(&g);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我几天前开始学习Rcpp包,我正在逐步学习如何使用这个包.我可以看到,对于R中的许多函数,已经编写了一个相应的函数,它在C++中通过Rcpp包非常相似,我想这就是所谓的"Rcpp Sugar".我试图在我的C++代码中使用类似于rep()函数(R)的东西,我发现在Rcpp中我们有一些叫做rep_each的东西:
然后我找到了http://dirk.eddelbuettel.com/code/rcpp/html/classRcpp_1_1sugar_1_1Rep__each.html
问题是在阅读本页后,我仍然不知道如何使用它.即使我不知道论点是什么.是否有文档提供不同Rcpp糖功能的示例?
非常感谢
我有一个CouchDB DB,前面有一个Nginx反向代理.CouchDB的一些响应需要很长时间才能生成(是的,这是一个糟糕的选择,但现在需要坚持使用它),我想用Nginx缓存它们.(目前Nginx只执行SSL.)
CouchDB支持Etags,理想情况下我想要的是Nginx缓存Etags以及哑客户端.客户端不使用Etags,他们只会查询Nginx,后者使用缓存的Etag访问CouchDB,然后将缓存的响应或新的响应发送回客户端.
我基于文档的理解是Nginx目前无法做到这一点.我错过了什么吗?是否有支持此设置的替代方案?或者唯一的解决方案是手动使Nginx缓存无效?
如何读取二部图?我尝试了以下代码,但是当我尝试制作 OMP 时,它说
Error in bipartite.projection(g, types = NULL) :
Not a bipartite graph, supply `types' argument
Run Code Online (Sandbox Code Playgroud)
这是代码:
edgelist = read.csv("g1.csv",header=FALSE,sep=",")
g = graph.edgelist(as.matrix(edgelist),directed=FALSE)
proj <- bipartite.projection(g,types=NULL)
g2= proj[[1]]
myplot(g2)
Run Code Online (Sandbox Code Playgroud)
g1.csv 1,5 1,4 2,4 3,5