echo 'deb http://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/linux/ubuntu trusty/' >>/etc/apt/sources.list apt-get update你看你会遇到如下错误:
W: GPG error: http://mirrors.tuna.tsinghua.edu.cn trusty/ Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 51716619E084DAB9原因是因为没有添加对应的GPG key,解决方法很简单,从一个公共服务器添加一下即可:
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 51716619E084DAB9注意最后的那串数字上述报错后的PUBLIC KEY.添加KEY后,再执行apt-get update即可.
apt-get install r-base安装完成后,在控制台输入R即可进入R语言环境.下面是一些常用的操作:
.libPaths():查看库路径
library():查看安装的所有包
install.packages("mypackage"):安装包
remove.packages("mypackage"):卸载包
library("mypackage"):载入一个已经安装的包
update.packages():更新包
q():退出R语言环境
R语言的数据可视化能力很强悍,强悍的原因是因为一些强悍的可视化工具包以及相应的辅助包,
所以安装完R语言后,我们需要先将一些包安装好,比如下面这些包:
install.packages('igraph')
install.packages('network')
install.packages('sna')
install.packages('ndtv')
install.packages('visNetwork')
install.packages('statnet')
install.packages("extrafont") #font_import()
install.packages('stringr')#
有的包比较大,编译的时间比较长,所以安装的时间也比较长,在安装包的时候会提示选择从哪个地方下载:
选择China即可.
数据类型
向量(vector),矩阵(matrix),数组(array),数据框(data frame),因子(factor),列表(list)
算术运算
加法,减法,乘法,除法,乘幂 ==> +,-,*,/,^
大于,小于,大于等于,小于等于,等于,不等于 ==> >、<、>=、>=、==、!=
模运算 ==> x %% y
整数除法 ==> x %/% y
标量的逻辑与和逻辑或 ==> &&,||
向量的逻辑与和逻辑或 ==> &,|
! ==> 逻辑非
逻辑真假 ==> TRUE,FALSE
赋值语句 ==> x <- val,将val复制给x,注意为了避免错误,应该在赋值号<-两端加上空格.
需要注意的是,在函数传递时则只能使用等于(=)赋值号.
控制流
if/else语句:要求else必须和if的右括号处于同一行.比如,
if(exp1) {
this codes...
} else { #else应该与{处于同一行
that codes...
}
多分支结构:
if( exp1 ){
this coeds...
}else if( exp2 ){
that codes...
}else{
no codes...
}
三元操作符结构:x >- if( expr ) 1 else 2,另一种方式:ifelse(expr,expr-true-val,expr-false-val)
for/while/repeat:似乎没什么可说的
repeat:无条件循环,必须在程序内部设法退出
repeat:
{
iTotal <- iTotal + i
i <- i+1
if(i <= 100) next else break # 注意:next,break的用法
}
switch语句:
n <- 2
switch(n,
print("德玛西亚"),
print("探险家"),
print("多兰之剑"),
print("狂徒铠甲"),
print("提莫")
)
#将会输出探险家
调试语句
print(expr)
R计算的特点
1)向量化(逐个元素循环操作)
例:y=1:10; y+1; sqrt(y);
2)两个不等长的变量循环填充
例:x=1:3; y=1:10; z=x+y
Rscript rscript.r arg1 arg2 ...
#=====================================================
#filename:plotcsv.r
#Useage:Rscript plotcsv.r fname.csv isdirected isweighted
#-----------------------------------------------------
#参数:默认生成无向无权图:
# 第一个参数fname.csv:存储邻接矩阵的csv文件
# 第二个参数isdirected:为0时无向图,为1时有向图(可选)
# 第三个参数isweighted:为0时无权图,为1时有权图(可选,
# 但有第三个参数时,第二个参数必须有)
#输出:高清无损svg矢量图片
#-----------------------------------------------------
#2016-09-06 Tue 02:49 PM
#bugnofree
#dXAyZ2Vla0AxNjMuY29tCg==
#=====================================================
library(igraph)
library(stringr)
#读取输入参数,第一个参数为args[1],第二个为args[2],依次类推
args<-commandArgs(T)
#读取csv文件(没有头)
mygraph=read.csv(args[1], header=FALSE)
#csv转换为邻接矩阵
M <- as.matrix(mygraph)
#默认是无向图
gmode <- "undirected"
if(length(args) >= 2) {
if(as.numeric(str_trim(args[2],side='both')) == 0) gmode <- "undirected"
if(as.numeric(str_trim(args[2],side='both')) == 1) gmode <- "directed"
}
#默认不带权图
gweight <- FALSE
if(length(args) == 3) {
if(as.numeric(str_trim(args[3],side='both')) == 0) gweight <- FALSE
if(as.numeric(str_trim(args[3],side='both')) == 1) gweight <- TRUE
}
#print(M>1)
if(gweight == TRUE) {
g <- graph.adjacency(adjmatrix=M, mode = gmode, weighted=TRUE, diag=FALSE)
} else {
#无权重绘画图时,R会将矩阵中的数值作为两点间的线条数目
#为了消除这个影响,无权重时对所有权重大于1的置为1
M[M > 1] <- 1
g <- graph.adjacency(adjmatrix=M, mode = gmode,diag=FALSE)
}
#nrow(mygraph):返回矩阵的行数目,等价于点的数目
#然后使用串联函数c()来生成点标签,主要是为了自
#定义点索引(因为默认是从1开始,且是V1,V2..)
V(g)$name <- c(1:nrow(mygraph))
#输出文件名称,保存为svg文件
output <- str_c(str_trim(args[1],side='both'),".svg")
#设置为svg输出
svg(output)
#画图
if(gweight == FALSE) {
plot(g)
} else { #注意R语法中要求else必须和右括号在一行上
plot(g,edge.label=(E(g)$weight))
}
#print(gmode)
#print(gweight)
dev.off()
图的算法是用C++实现的,为了方便生成图,可以在C++类里面写一个工具函数,
该工具函数将图以邻接矩阵输出,并保存为csv文件,然后使用R语言读取该CSV文件,
进而生成图片,上述R脚本就是用于读取csv文件并生成对应图片的代码.
如果该工具函数在控制台输出R脚本的调用命令(如:Rscript plotcsv.r 1.csv 1 0),
那么此过程可以借助makefile,使用`make`(注意为反引号)可以实现一个命令完成C++程序的编译并生成对应的图片.0,1,0,1,0,0,1 0,0,1,0,0,0,0 0,0,0,1,1,1,0 0,0,0,0,0,1,0 0,0,0,0,0,1,0 0,0,0,0,0,0,1 0,0,0,0,0,0,0那么可以使用R的read.csv来读取该文件,然后调用as.matrix生成一个矩阵数据,再使用graph.adjacency生成邻接矩阵. 最后通过plot来绘制图形,如下:
jpeg("xxx.jpeg", width = 4, height = 4, units = 'in', res = 300)
plot(x, y)
dev.off()
png("xxx.png", width = 4, height = 4, units = 'in', res = 300)
plot(x, y) # Make plot
dev.off()
pdf("xxx.pdf", width = 4, height = 4)
plot(x, y) # Make plot
dev.off()
上面的plot函数参数很多,设置点和边的属性包括如下一些(但不限于此):
vertex.size = 25 vertex.color="red" vertex.frame.color= "white" vertex.label.color = "white" vertex.label.family = "sans" edge.width=2 edge.color="black"使用邻接列表也可以绘制:
默认是无向图: g <- graph( c(1,2,1,3,1,4,3,4,3,5,5,6,6,7,7,8,8,9,3,8,5,8)) 但是也可以设置有向图: g <- graph( c(1,2,1,3,1,4,3,4,3,5,5,6,6,7,7,8,8,9,3,8,5,8), directed = FALSE) 设置权重: E(g)$weight=c(1:length(E(g))) plot(g,edge.label=E(g)$weight) 实际上你用下面这样的语句也可以: #E(g)$w=c(1:length(E(g))) #plot(g,edge.label=E(g)$w)
Ref:
1.http://liguodongiot.github.io/blog/r/blog001.html
2.https://cran.r-project.org/doc/contrib/Liu-FAQ.pdf
3.https://github.com/yanping/r-spring-camp/blob/master/1-introduction.md