R programming羊羊学习笔记

1- 这篇笔记内容源于the art of programming,如果有python基础或者matlab基础,看起来应该会非常快而且简单
2-几个内置常用函数(写完觉得看起来有点乱)
help()              #第一重要的函数,不会就help
AnyOfFunctionName   #第二重要的,直接敲函数名,学习函数,直接看函数代码          
x = c(1,2,3,4)      #赋值方法1
x <- c(1,2,3,4)     #赋值方法2
c(1,2,3,4) -> x     #赋值方法3
x = c(x,5)          #添加值
x = c(x[1:2],5x[3:4])   #插入值
x = x[-2:-3]        #删除第二和第三个值
mean(x)             #均值
sd(x)               #标准差
sqrt(x)             #开方
min(x)              #最小值
max(x)              #最大值
which.max(x)        #最大值的位置
which.min(x)        #最小值的位置
exp(x)              #e幂次方
log(x)              #求log
abs(x)              #求绝对值
data()              #打开选择内置数据集
rnorm(2)            #产生2个正态分布的值
mean(Nile)          #直接使用其中一个内置数据集求均值
hist(Nile)          #绘制直方图
x <<- x+1           #影响全局,<<-符号相当于global
m = rbind(c(1,2),c(3,4))    #按行合并
m = cbind(c(1,2),c(3,4))    #按列合并
m * m               #矩阵点乘
m %*% m             #矩阵乘
x$u                 #类似于成员关系struct.member,R语言中list相当于c的struct
data = read.table("xx.txt",header = F)  #读表格数据,无特征名字
class(m)            #查询数据所属类型
str(m)              #转换为字符类型
as.character(m)     #转换为字符类型
as.numeric(m)       #转换为数值类型
method(as)          #查看所有的as方法
attribute(m)        #查询矩阵维度
head(data)          #查看data的前小部分数据
tail(data)          #查看data的后小部分数据
length(data)        #变量元素个数,字符串除外
y = vector(length = 2)  #声明y为长度为2的向量
1:3                 #产生1,2,3
1:3-1               #产生0,1,2
1:(3-1)             #产生1,2
seq(1,6)            #产生序列1,2,3,4,5,6
seq(1,6,2)          #产生序列1,3,5
rep(3,4)            #重复产生3,3,3,3
rep(1:3,2)          #重复产生1,2,3,1,2,3
any(x>80)           #只要x中元素有一个大于80,就是TRUE
all(x>80)           #x所有元素大于80,才是TRUE
c(1,2)+c(1,2,3,4)   #长度不一致向量相加,产生2,4,4,6,短的向量被重复利用,同理,四则运算一致,同理,可以把矩阵按列排成向量
z[-1:-3]            #取z向量除了第一到第三个元素的其他元素
name(x) = c("sex","name","age") #给x各列元素添加特征名
x["name"]           #当命名之后可以直接输出整列
x[1]                #如果x已命名,输出该列包括名字(tag)
x[[1]]              #如果x已命名,输出第一列的名字(tag)
round(x)            #对x每个元素四舍五入
x = x[x*2 > 10]     #滤波器,返回所有2倍x元素大于10的值
which(x*2 > 10)     #滤波器,返回所有2倍x元素大于10的下标(位置)
y = x > 10          #对一个向量做判断,返回一个bool向量
x = ifelse(y%%2==0,2,1)  #如果y是偶数,x=2,否则x=1
x = ifelse(k == 'M',1,ifelse(k == 'N',2,3)) #嵌套
m = matrix(c(1,2,3,4),2,2)  #生成2行2列矩阵
m = matrix(0,3,3)           #生成3行3列零矩阵
m1 = m[2,,drop = F]         #获取m矩阵的第二行作为矩阵来处理,而不是向量
v = as.matirx(m)        #把m向量处理成v矩阵
x = sort(x)             #对x排序
union(x,y)              #取并集
intersect(x,y)          #取交集
setdiff(x,y)            #x中有哪几个元素是y没有的
setdiff(y,x)            #y中有哪几个元素是x没有的
combn(1:4,2)            #1-4中两两组合的所有可能,生成matrix
#输入输出
#以下两个函数都可以传入文件名,读取文件
z = scan()              #一直接收数值数据,直到2个回车
z = readline()          #接收一行数据,包括数字空格字符
print(z)                #单一输出z
sprintf("abc%dac",1)    #像c语言一样格式化输出,结果abc1dac
cat(z,"123")            #cat可以合并输出结果z 123
cat(z,"123",sep ='')    #默认用空格连接,改成无字符连接,结果z123
#everything is object
ls()                    #查看所有使用中的对象
rm(x1,x2)               #删除x1,x2对象
exists("data")          #查看data这个对象存在与否
get("data")             #获取data这个对象的内容
lines(x,y)              #画折线
points(x,y)             #在当前图画点
legend()                #
text(x,y,"abc")         #在当前图(x,y)位置添加文本abc
text(locator(1),"abc")  #利用指示器点击任意位置添加文本abc
paste("num",1)          #得到结果num 1(中间有空格)
paste("num",1,sep='')   #得到结果num1
3-R几个常见概念
  • session一次会话,当你保存一次会话使,生成一个Rdata文件,该会话存储了你在console敲的所有变量,当你加载了这个session就加载了所有存储的变量
  • R的向量下标从1开始
  • R的逻辑操作符 &与,|或,!非
  • R语言apply用法:
  • 在for循环中可以用 a in b,列举所有b的元素放到a,但是想要确定某个元素在不在b要用a %in% b,查看b里面有没有a。
4-R的DataFrame操作
x = data.frame(c(1,2),c('a','b'),stringAsFactors = F)   #创建
names(x) = c('key','value')      #命名
#其他操作类比list,好像没差
5-R读入数据进行统计

示例

y = factors(c('a','b','a','b','a'))
z = table(y)
#z
#a b
#3 2
as.vector(z)
#3 2

所以我们可以利用table函数对读入的数据进行统计

6-R解决线性方程组,有意思
a = matrix(c(1,1,-1,1),2,2)
b = c(2,4)
solve(a,b)
#3 1
#x-y=2  solve解方程,   x=3
#x+y=4                  y=1
7-R-OOP
#简单的定义一个类
setClass("myClass",
representation(
    name = "character",
    age = "numeric",
    marriaged = "logical"
)
)
#创建一个对象实例
andy = new("myClass",name = "andy",age = 19,marriaged = T)
#访问对象成员
andy@age
#19
#我们敲入andy的时候会调用show()函数来显示,我们可以重写这个函数
setMethod("show","myClass",
function(object){
    inOrOut = ifelse(object@marriaged,"is","is not")
    cat(object@name,"is",object@age,"this year and",inOrOut,"marriaged!\n")
}
)
#andy
#andy is 19 this year and is marriaged!
#好玩吧
8-R线性回归简单举例
x = c(1,3,4)
y = c(1,5,9)
plot(x,y)           #画出点图
lmr = lm(y~x)       #y对x的线性回归
abline(lmr)         #在原点图的基础上画出线性回归
#解释一下abline(c(2,1))对应画y=x+2的函数
9-R画三维图简单举例
library(lattice)
a = 1:10
b = 1:15
eg = expand.grid(x=a,y=b)       #生成一个数据框架
eg$z = eg$x^2 +eg$x * eg$y      #z = x^2 + x*y
wireframe(z~x+y,eg,shade = T)   #画出了一个这样的平面
10-R语言提高执行速度(但是要注意,大部分情况下,time反比memory)
  1. 尽量使用向量计算,能不用循环就不用循环,因为在R语言里面“:”是调用函数的,“[”,“]”也是要调用函数的,所以在for循环里面要一直调用函数,降低执行速度。可以提高执行速度的向量化函数ifelse(),which(),any(),where(),all()。matrix也是一种特殊的向量

example:

#ORIGINAL
sum = 0
nreps = 100000
for(i in 1:nreps){
    xy = rnorm(2)
    sum = sum + max(xy)
}
print(sum/nreps)
#VERCTERIZE
nreps = 100000
yxmat = matrix(rnrom(2*nreps),ncol = 2)
maxs = pmax(xymat[,1],xymat[,2])
print(mean(maxs))
  1. 通过混合编程,用c编写函数,R来调用,或者在python里面调用R,都可以提高执行速度
  2. 并行处理,分为并行硬件和并行软件,这里介绍并行处理软件:
    • 安装OpenMP、LAM或者MPICH2,R包Rmpi提供接口对MPI(message-passing interface)(具体操作步骤参考“the art of R programming -Chapter 17.2”)
    • 重头戏,snow package,毕竟Rmpi的操作实在太复杂了,snow package运行速度在Rmpi之上,直接通过网络socket
cls = makeCluster(type = "SOCK",spec = c("PC48","PC49"))    #以TCP/IP工作方式
#不使用snow
apply(a,1,"%*%",c(1,1))
#使用snow
parApply(cls,a,1,"%*%",c(1,1))
stopCluster(cls)                                            #不用的时候退出

总之,snow包要好好学,好好用,要写也写不完。。。

两个网址,好好看:
- http://cran.cnr.berkeley.edu/web/packages/snow/index.html
- http://www.sfu.ca/~sblay/R/snow.html#clusterCall#

“the art of R programming”download
链接:http://pan.baidu.com/s/1o7Vnc06 密码:ydnj

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值