R语言(自定义函数、循环语句、管道函数)

学习R语言半年多了,以前比较注重统计方法上的学习,但是最近感觉一些基础知识也很重要。去年的参考资料是《R语言实战》,今年主要是看视频。推荐网易云课堂里的教程,很多资料都是很良心的~

目前学习的是:R语言数据分析挖掘实战,讲的很全,从基础知识到R语言机器学习的应用。

(我是先从后面机器学习开始学的,发现老师在里面用到很多自定义函数、循环,以前在书上看到这些也没有实际操作过,所以赶紧看前面的视频补补课)

今天的例子都很简单啦...

1、while循环

s<-1
i<-0
while(i<=100)
{
s<-s+i
i<-i+1
}
s
while(/prod(:i)-/prod(:(i+))>0.001)
{
print(i)
e<-e+/prod(:i)
i<-i+
}
e
#添加print(i),可以看出具体的i值

2、for循环

a<-c(,,,,)
for(i in c(:length(a)))
{
print(i)
}
#打印序号
a<-c(,,,,)
for(i in a)
{
print(a[i])
}
#打印元素
#or
a<-c(,,,,)
for(i in a)
{
print(i)
}
mat<-as.data.frame(diag(()))
for(i in :)
{
for(j in :)
if(i>=j)
{
mat[i,j]=paste(i,"*",j,"=",i*j)
}
else{mat[i,j]=""}
}
mat
#打印99乘法表

打印出来的乘法表:

> mat
V1 V2 V3 V4 V5 V6 V7 V8 V9
* =
* = * =
* = * = * =
* = * = * = * =
* = * = * = * = * =
* = * = * = * = * = * =
* = * = * = * = * = * = * =
* = * = * = * = * = * = * = * =
* = * = * = * = * = * = * = * = * =

3、循环嵌套

b<-matrix(c(:),)
for(i in c(:nrow(b)))
for(j in c(:ncol(b)))
{
print(b[i,j])
}

b
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 5 9 13 17 21
[2,] 2 6 10 14 18 22
[3,] 3 7 11 15 19 23
[4,] 4 8 12 16 20 24

返回的是这样的:

[1] 1 #a11
[1] 5 #a12
[1] 9
[1] 13
[1] 17
[1] 21
[1] 2 #a21
[1] 6
[1] 10
[1] 14
[1] 18
[1] 22
[1] 3
[1] 7
[1] 11
[1] 15
[1] 19
[1] 23
[1] 4
[1] 8
[1] 12
[1] 16
[1] 20
[1] 24

4、repeat()函数

s<-
i<-
repeat{
if(i>){break()} #break()即推出循环
s<-s+i
i<-i+
}
s
#repeat()

5、自定义一个计算矩阵乘积的函数

mat1<-matrix(c(:),nrow = ,ncol = );mat1
mat2<-matrix(c(:),nrow = ,ncol = );mat2
f<-function(x,y)
{
xcol<-dim(x)[]
yrow<-dim(y)[]
m<-dim(x)[]
n<-dim(y)[]
if(xcol!=yrow) #向量乘积的要求
{
print("error")
return()
}
else #if...else语句
{
mat<-matrix(,nrow=dim(x)[],ncol=dim(y)[]) #首先要定义一个矩阵作为结果矩阵
for(i in c(:m))
for(j in c(:n))
mat[i,j]<-sum(x[i,]*y[,j])
return(mat)
}
}
f(mat1,mat2)
mat1%*%mat2 #验证函数,bingo

6、管道函数%>%

用法

a%>%b等价于f(a,b)
a %>%f(a,.,c)等价于f(a,b,c)【里面是.,看清楚!】

一个简单的栗子

plus<-function(x,y,z)
{
return(x*y+z) }
plus(,,)
%>%plus3(,.,)

计算f(x)=sin(x+1)^2在x=4的值

x<-
a<-x+
b<-a^
d<-sin(b)
d
#利用管道函数:
f1<-function(x){return(x+)}
f2<-function(x){return(x^)}
f3<-function(x){return(sin(x))}
x%>%f1()%>%f2()%>%f3()

再来一个栗子,把时间变成这样的: "2018-05-02 19:50:02”

先定义一个随机的时间矩阵:

data<-as.Date("2017-5-2");data
hour<-sample(:,)
min<-sample(:,)
second<-sample(:,)
dat<-data.frame(data,hour,min,second)
> dat
data hour min second
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--

利用到一个包,里面一个函数unite,有个小示范

library(tidyr)
a<-data.frame(a1=c(:),a2=c(:));a
unite(a,a12,a1,a2,sep="|_|") #将矩阵a里的a1列和a2列通过|_|连接成新列a12
 a<-data.frame(a1=c(:),a2=c(:));a
a1 a2

变成了这样

    a12
|_|
|_|
|_|

下面可以用管道函数转变时间的显示啦:

dat%>%unite(datahour,data,hour,sep=" ")%>%unite(datatime,datahour,min,second,sep=":")

结果是这样:

              datatime
-- ::
-- ::
-- ::
-- ::
-- ::
-- ::
-- ::
-- ::
-- ::
-- ::
-- ::
-- ::
-- ::
-- ::
-- ::
>
上一篇:sql关联表查询结果并插入


下一篇:code vs1262 不要把球传我(组合数学) 2012年CCC加拿大高中生信息学奥赛