R 复习 菜鸟教程

R语言老师说R好就业,学就完了

基础语法

cat()可以拼接函数:

> cat(1, "加", 1, "等于", 2, '\n')
11 等于 2

sink():重定向

sink("r_test.txt", split=TRUE)  # 控制台同样输出
for (i in 1:5) 
    print(i)
sink()   # 取消输出到文件

sink("r_test.txt", append=TRUE) # 控制台不输出,追加写入文件
print("RUNOOB")
# 当前工作目录
print(getwd())

# 设置当前工作目录
setwd("/Users/runoob/runoob-test2")

# 查看当前工作目录
print(getwd())

基础运算

%%	整除求余
%/%	整除
%in%	用于判断元素是否在向量里,返回布尔值,有的话返回 TRUE,没有返回 FALSE%*%	    用于矩阵与它转置的矩阵相乘。

# 1 到 10 的向量
v <- 1:10
print(v) 

# 判断数字是否在向量 v 中
v1 <- 3
v2 <- 15
print(v1 %in% v) 
print(v2 %in% v) 

# 矩阵与它转置的矩阵相乘
M = matrix( c(2,6,5,1,10,4), nrow = 2,ncol = 3,byrow = TRUE)
t = M %*% t(M)
print(t)

数据类型

变量按对象类型来分是以下 6 种:
向量(vector)
列表(list)
矩阵(matrix)
数组(array)
因子(factor)
数据框(data.frame)

seq(data,from,to,len):等差数列
rep():重复

NA:占位符

> toupper("Runoob") # 转换为大写
[1] "RUNOOB"
> tolower("Runoob") # 转换为小写
[1] "runoob"
> nchar("中文", type="bytes") # 统计字节长度
[1] 4
> nchar("中文", type="char") # 总计字符数量
[1] 2
> substr("123456789", 1, 5) # 截取字符串,从 1 到 5
[1] "12345"
> substring("1234567890", 5) # 截取字符串,从 5 到结束
[1] "567890"
> as.numeric("12") # 将字符串转换为数字
[1] 12
> as.character(12.34) # 将数字转换为字符串
[1] "12.34"
> strsplit("2019;10;1", ";") # 分隔符拆分字符串
[[1]]
[1] "2019" "10"   "1"
> gsub("/", "-", "2019/10/1") # 替换字符串
[1] "2019-10-1"
> (A = matrix(c(1, 3, 2, 4), 2, 2))
     [,1] [,2]
[1,]    1    2
[2,]    3    4
> apply(A, 1, sum) # 第二个参数为 1 按行操作,用 sum() 函数
[1] 3 7
> apply(A, 2, sum) # 第二个参数为 2 按列操作
[1] 4 6

判断语句

R 语言提供了以下类型的判断语句:
if 语句
if…else 语句
switch 语句

switch 没有默认参数可用。

循环

R 语言提供的循环类型有:
repeat 循环 用 break
测试+ while 循环
for 循环 +测试

R 语言提供的循环控制语句有:
break 语句
Next 语句 用于 switch

函数

function_name <- function(arg_1, arg_2, ...) {
    # 函数体
    # 执行的代码块
    return(output)
}

str():显示对象的结构和内容摘要

字符串

paste(..., sep = " ", collapse = NULL):合并字符串

a <- "Google"
b <- 'Runoob'
c <- "Taobao"

print(paste(a,b,c))

print(paste(a,b,c, sep = "-"))

print(paste(letters[1:6],1:6, sep = "", collapse = "="))
paste(letters[1:6],1:6, collapse = ".")

输出结果:
[1] "Google Runoob Taobao"
[1] "Google-Runoob-Taobao"
[1] "a1=b2=c3=d4=e5=f6"
[1] "a 1.b 2.c 3.d 4.e 5.f 6"

列表

list_data <- list("runoob", "google", c(11,22,33), 123, 51.23, 119.1)
print(list_data)

输出结果:
[[1]]
[1] "runoob"

[[2]]
[1] "google"

[[3]]
[1] 11 22 33

[[4]]
[1] 123

[[5]]
[1] 51.23

[[6]]
[1] 119.1
# 列表包含向量、矩阵、列表
list_data <- list(c("Google","Runoob","Taobao"), matrix(c(1,2,3,4,5,6), nrow = 2),
   list("runoob",12.3))

# 给列表元素设置名字
names(list_data) <- c("Sites", "Numbers", "Lists")

# 显示列表
print(list_data)

输出结果:
$Sites
[1] "Google" "Runoob" "Taobao"

$Numbers
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

$Lists
$Lists[[1]]
[1] "runoob"

$Lists[[2]]
[1] 12.3
# 列表包含向量、矩阵、列表
list_data <- list(c("Google","Runoob","Taobao"), matrix(c(1,2,3,4,5,6), nrow = 2),
   list("runoob",12.3))

# 给列表元素设置名字
names(list_data) <- c("Sites", "Numbers", "Lists")

# 添加元素
list_data[4] <- "新元素"
print(list_data[4])

# 删除元素
list_data[4] <- NULL

# 删除后输出为 NULL
print(list_data[4])

# 更新元素
list_data[3] <- "我替换来第三个元素"
print(list_data[3])
# 创建两个列表
list1 <- list(1,2,3)
list2 <- list("Google","Runoob","Taobao")

# 合并列表
merged.list <- c(list1,list2)

# 显示合并后的列表
print(merged.list)
# 创建列表
list1 <- list(1:5)
print(list1)

list2 <-list(10:14)
print(list2)

# 转换为向量
v1 <- unlist(list1)
v2 <- unlist(list2)

print(v1)
print(v2)

# 两个向量相加
result <- v1+v2
print(result)

矩阵

matrix(data = , nrow = , ncol = , byrow = FALSE,dimnames = NULL)

data 向量,矩阵的数据
nrow 行数
ncol 列数
byrow 逻辑值,为 FALSE 按列排列,为 TRUE 按行排列
dimname 设置行和列的名称

# byrow 为 TRUE 元素按行排列
M <- matrix(c(3:14), nrow = 4, byrow = TRUE)
print(M)

# Ebyrow 为 FALSE 元素按列排列
N <- matrix(c(3:14), nrow = 4, byrow = FALSE)
print(N)

# 定义行和列的名称
rownames = c("row1", "row2", "row3", "row4")
colnames = c("col1", "col2", "col3")

P <- matrix(c(3:14), nrow = 4, byrow = TRUE, dimnames = list(rownames, colnames))
print(P)

数组

array(data = NA, dim = length(data), dimnames = NULL)

data - 指定数组的数据源,可以是一个向量、矩阵或列表。
dim - 指定数组的维度,可以是一个整数向量或一个表示维度的元组,默认是一维数组。例如,dim = c(2, 3, 4) 表示创建一个 2x3x4 的三维数组。
dimnames - 可选参数,用于指定数组每个维度的名称,可以是一个包含维度名称的列表。
apply(X, MARGIN, FUN, ...)

X:要应用函数的数组或矩阵。
MARGIN:指定应用函数的维度,可以是1表示行,2表示列,或者c(1, 2)表示同时应用于行和列。
FUN:要应用的函数,可以是内置函数(如mean、sum等)或自定义函数。

# 创建两个不同长度的向量
vector1 <- c(5,9,3)
vector2 <- c(10,11,12,13,14,15)

# 创建数组
new.array <- array(c(vector1,vector2),dim = c(3,3,2))
print(new.array)

# 计算数组中所有矩阵第一行的数字之和
result <- apply(new.array, c(1), sum)
print(result)

数据重塑

cast():函数用于对合并对数据框进行还原
dcast():返回数据框
acast():返回一个向量/矩阵/数组。

.libPaths():查看 R 包的安装目录

library():查看已安装的包

install.packages(“要安装的包名”)

读取文件

data <- read.csv("sites.csv", encoding="UTF-8")

# likes 为 222 的数据
retval <- subset(data, likes == 222)

# 写入新的文件
write.csv(retval,"runoob.csv")
newdata <- read.csv("runoob.csv")
print(newdata)

summary():获取关系模型的概要

predict(object, newdata)

object - lm() 函数创建的公式。
newdata - 要预测的值。

实例

通过自定义一个函数来查找向量中重复次数最多的元素

# 创建向量
getmode <- function(v) {
   uniqv <- unique(v)
   uniqv[which.max(tabulate(match(v, uniqv)))]
}

# 数字向量
v <- c(2,1,2,3,1,2,3,4,1,5,5,3,2,3)

# 计算结果
result <- getmode(v)
print(result)

# 字符串向量
charv <- c("google","runoob","taobao","runoob","runoob")

# 计算结果
result <- getmode(charv)
print(result)
# 创建向量
x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)
# 计算平均值
result.mean <-  mean(x,trim = 0.3)//去掉首尾各 3 个元素
result.mean2 <- mean(c(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17))
print(result.mean)
print(result.mean2)

总结

我知道的和我觉得不是重点的我就没写,建议搭配前面两篇文章和课本一块使用

你可能感兴趣的:(r语言,python,开发语言)