R 复习 菜鸟教程

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

基础语法

cat()可以拼接函数:

r 复制代码
> cat(1, "加", 1, "等于", 2, '\n')
1 加 1 等于 2

sink():重定向

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

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

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

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

基础运算

r 复制代码
%%	整除求余
%/%	整除
r 复制代码
%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:占位符

r 复制代码
> 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"
r 复制代码
> (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

函数

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

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

字符串

r 复制代码
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"

列表

r 复制代码
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
r 复制代码
# 列表包含向量、矩阵、列表
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
r 复制代码
# 列表包含向量、矩阵、列表
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])
r 复制代码
# 创建两个列表
list1 <- list(1,2,3)
list2 <- list("Google","Runoob","Taobao")

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

# 显示合并后的列表
print(merged.list)
r 复制代码
# 创建列表
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)

矩阵

r 复制代码
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)

数组

r 复制代码
array(data = NA, dim = length(data), dimnames = NULL)

data - 指定数组的数据源,可以是一个向量、矩阵或列表。
dim - 指定数组的维度,可以是一个整数向量或一个表示维度的元组,默认是一维数组。例如,dim = c(2, 3, 4) 表示创建一个 2x3x4 的三维数组。
dimnames - 可选参数,用于指定数组每个维度的名称,可以是一个包含维度名称的列表。
r 复制代码
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("要安装的包名")

读取文件

r 复制代码
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():获取关系模型的概要

r 复制代码
predict(object, newdata)

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

实例

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

# 创建向量
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)
r 复制代码
# 创建向量
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)

总结

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

相关推荐
Swift社区2 小时前
在 Swift 中实现字符串分割问题:以字典中的单词构造句子
开发语言·ios·swift
没头脑的ht2 小时前
Swift内存访问冲突
开发语言·ios·swift
没头脑的ht2 小时前
Swift闭包的本质
开发语言·ios·swift
wjs20242 小时前
Swift 数组
开发语言
xiaoyalian3 小时前
R语言绘图过程中遇到图例的图块中出现字符“a“的解决方法
笔记·r语言·数据可视化
stm 学习ing3 小时前
FPGA 第十讲 避免latch的产生
c语言·开发语言·单片机·嵌入式硬件·fpga开发·fpga
湫ccc4 小时前
《Python基础》之字符串格式化输出
开发语言·python
mqiqe5 小时前
Python MySQL通过Binlog 获取变更记录 恢复数据
开发语言·python·mysql
AttackingLin5 小时前
2024强网杯--babyheap house of apple2解法
linux·开发语言·python