R语言基础语法

1. 基础语法

  • 赋值 = 或者<-

  • 输出 print()

  • 变量定义可以以.开头

  • 查看已定义的变量print(ls())

  • cat()函数

    • 把结果拼接

    • cat() 函数支持直接输出(覆盖)结果到文件:cat("R语言学习", file="C:/Users/home/desktop/r_test.txt")

    • 追加写入:cat("GOOGLE", file="C:\\Users\\home\\desktop\\r_test01.txt", append=TRUE)

  • sink()函数

    • 可以将控制台的文字输出(覆盖)到文件中,和控制台同时输出添加参数split=True,这个函数放到输出语句之前

    • sink()取消输出到文件

  • 从文件中读取文字

    • 将文件中文字读取为字符串 readLines("地址")

2. 注释

  • #

  • “”

3. 基础运算

  • 赋值 = 或者<-

  • 向右赋值->

  • 乘方运算^

  • 整除求余%%

  • 整除%/%

  • t=c(0,2,FALSE)

    print(!t)

    输出 [1] TRUE FALSE TRUE

  • 矩阵与其转置相乘

    v=1:10 #产生向量
    print(v)
    v1=3
    print(v1 %in% v) #判断是否在向量中
    M=matrix(v,nrow=2,ncol=5,byrow = TRUE) #构造2*5的矩阵
    print(M %*% t(M)) #矩阵和转置的乘积
  • round(n)对n四舍五入取整

  • round(n,m)对n保留m位小数四舍五入取整

  • ceiling(n)对n向上取整

  • floor(n)对n向下取整

4. 数据类型

  • c() 是一个创造向量的函数。

  • 下标代表第几个

  • v[c(1,3,5,7)]取出向量v的第一三五七项

  • v[c(-1,-4)] 不输出向量的第一项和第四项

  • sort()函数排序

  • rev()函数倒序

  • order(a)输出向量a排序后的下标

  • a(order(a))输出排序后的a

  • sum()

  • mean()

  • sd()标准差

  • var()方差

  • min()

  • max()

  • range()取值范围

  • 向量生成

    • c()

    • seq()生成等差数列

    • rep(0,3) #输出 0 0 0

  • NA 代表的是"缺失",NULL 代表的是"不存在"。

    • NA 缺失就想占位符,代表这里没有一个值,但位置存在。

    • NULL 代表的就是数据不存在。

    • length(c(NA,NA,NULL))=2

  • all() 用于检查逻辑向量是否全部为 TRUE,any() 用于检查逻辑向量是否含有 TRUE

  • toupper()转换为大写

  • 矩阵

    • 矩阵的初始化是由一个向量来完成的,然后说明几行几列

    • 如果想按行填充,需要指定byrow属性

    • x=martix(c(3,2,1,4),2,2) #2*2的矩阵

    • 矩阵的逆 solve(x)

    • apply(A, 1, sum) # 第二个参数为 1 按行操作,用 sum() 函数

    • apply(A, 2, sum) # 第二个参数为 2 按列操作

5. 判断语句

  • switch(expression, case1, case2, case3....)
  • expression 是常量表达式,可以是整数或者字符串

    • 如果是整数则返回对应的case值

    • 如果是整数不在范围内,返回NULL

    • 如果匹配到多个值则返回第一个

    • 如果是字符串的内容对应的case值,如果没有匹配则不返回

6. 函数

  • 自定义函数

function_name=function(a,b){
return(a+b)
}
  • 内置函数

    • seq(21,34) 输出21到34的所有数字

    • mean(21:100)输出21和100的平均数

    • sum(21:30)输出21到30所有数的和

  • 懒惰计算,不输入参数,函数不会报错,知道遇到要调用参数的语句时,会报错

7. 字符串

  • nchar() 函数用于计数字符串或数字列表的长度

  • toupper()函数用于将字符串转换为大写

  • tolower()函数用于将字符串转换为小写

  • subtring('Leonida',2,5)截取字符串从2到5

8. 列表

list_data <- list('Leonida','leonda',c(11,22,33),c('h','a'))
print(list_data)
#给列表命名
names(list_data)<- c('name','nick','number','word')
print(list_data)
#访问列表
print(list_data[1])
print(list_data$name)
#操作列表
#添加
list_data[4]<- c('32017019')
print(list_data[4])
#删除
list_data[4]<-NULL
print(list_data)
#更新列表
list_data[3] <- 'dance together'
#print(list_data[3])
print('update')
print(list_data)
#合并
list_data2=c('kaggle.com','tianchi.aliyun.com')
print('merge:')
print(c(list_data,list_data2))
#创建列表
list1 <- list(1:10)
list2 <- list(11:20)
#列表转换为向量
v1 = unlist(list1,1,10)
v2 = unlist(list2,10,1)
#向量相乘
print(v1 %*% v2)

9. 矩阵

v <- c(1:20)
rname <- c('f','s','t','forth')
cname <- c('f','s','t','f','f')
M <- matrix(v,4,5,TRUE,list(rname,cname)) #参数名即可以写又可以不写
N <- matrix(v,5,4,FALSE,dimnames=list(cname,rname))
print(N)
print(M)
#矩阵的转置
print(t(M))
#访问矩阵元素
print(M[4,5]) #第四行第五列的元素
print(M[4,]) #第四行元素
print(M[,5]) #第五列的元素
#矩阵相乘
#矩阵相除
w <- c(20:40)
N <- matrix(w,4,5,TRUE)
print(N)
print(M)
print(N*M)
print(N/M)
print(N %*% t(M))

10. 数组

array(data = NA, dim = length(data), dimnames = NULL)
  • data是向量

  • dim是维度,默认是一维

  • dimnames维度的名称,必须是列表

#创建数组
v <- c(1,2,3)
w <- c(4:9)
rname <- c('r1','r2','r3')
cname <- c('c1','c2','c3')
Mname <- c('Matrix1','Matrix2')
M <- array(c(v,w),dim=c(3,3,2),dimnames = list(rname,cname,Mname))
print(M)
# 输出
r$> source("e:\\R\\test07.R", encoding = "UTF-8")
, , Matrix1

  c1 c2 c3
r1  1  4  7
r2  2  5  8
r3  3  6  9

, , Matrix2

  c1 c2 c3
r1  1  4  7
r2  2  5  8
r3  3  6  9

#访问数组
#输出第一个矩阵
print(M[,,1])
#输出第二个矩阵的第一行
print(M[1,,2])
#输出第二个矩阵的第三列
print(M[,3,2])
#从数组中创建矩阵
m1 <- M[,,1]
m2 <- M[,,2]
print(m1+m2)

11. 数据框

可以理解为常说的表格

  • 每一列都有一个列名,长度都是相等的

  • 同一列的数据类型要一致

  • 不同列的数据类型可以不一样

table <- data.frame(name<-c('LiMing','Leonida','Leonda'),age<-c(18,22,18),province<-c('Beijing','Gansu','Shanghai'))
print(table)
print(str(table)) #数据框的数据结构
print(summary(table)) #数据框的概要信息
#提取指定的列
print(data.frame(table$name,table$age,table$province))
#输出前两行
print(table[1:2,])
#读取第二三行的一二列数据
print(table[c(2,3),c(1,2)])
#扩展数据框
table$部门 <- c('开发','运营','宣传')
print(table)
#将多个向量合成为一个数据框
city <- c('北京','上海','西安')
gdp <- c(12000,11000,10000)
ename <- c('beijing','shanghai','xi\'an')
table1 <- cbind(city,gdp,ename)
table2 <- cbind(city,gdp,ename)
print(table1)
#合并两个数据框
table3 <- rbind(table2,table1)
print(table3)

12. 读csv文件

print(search()) #查看编译环境已载入的包
#print(library()) #查看已安装的包
data <- read.csv('data.csv')
print(data)
print(ncol(data)) #列数
print(nrow(data))
print(max(data$likes))
print(subset(data,likes>=555&name=="Hugo"))
hugo=subset(data,likes>=555)
write.csv(hugo,'hugo.csv')
newdata=read.csv('hugo.csv')
print(newdata)
data <- read.xlsx('sites.xlsx',sheetIndex=1)
print(data)

13. 画图

#绘制条形图
cvd19 = c(83534,2640626,585493)
barplot(cvd19,
   main="新冠疫情条形图",
   col=c("#ED1C24","#22B14C","#FFC90E"),
   names.arg=c("中国","美国","印度"),
   family='GB1'
)


#绘制曲线图
curve(3*x^2+2^x, -2 * pi, 2 * pi)


#绘制饼状图
# 数据准备
info = c(1, 2, 4, 8)
# 命名
names = c("Google", "Runoob", "Taobao", "Weibo")
# 涂色(可选)
cols = c("#ED1C24","#22B14C","#FFC90E","#3f48CC")
# 绘图
pie(info, labels=names, col=cols)


#自定义函数绘制图像
# 定义函数 f
f = function (x) {
   if (x >= 0) {
       x
  } else {
       x ^ 2
  }
}
# 生成自变量序列
x = seq(-2, 2, length=100)
# 生成因变量序列
y = rep(0, length(x))
j = 1
for (i in x) {
   y[j] = f(i)
   j = j + 1
}
# 绘制图像
plot(x, y, type='l')

#散点图
x<-c(10,22,3,13,40)
y<-c(20,2,45,22,60)
# 生成 png 图片
#png(file = "runnob-test-plot2.png")
plot(x, y, type="p",main='散点图',xlab='x轴',ylab='y轴')

 

posted @ 2021-04-04 18:34  Leonida  阅读(1065)  评论(0)    收藏  举报