title: "Lectures"
author: '01'
date: "2022-09-23"
output: pdf_document
knitr::opts_chunk$set(echo = TRUE)

R-basics

R变量的命名格式

  • 必须以字母开头
  • 只能包含字母、数字、下划线和.
  • 对大小写敏感
  • 不能是保留关键字

数据类型(mode)

  • numeric (10.5, 55, 787)
  • integer (1L, 55L, 100L, where the letter "L" declares this as an integer)
  • complex (9 + 3i, where "i" is the imaginary part)
  • character(a.k.a. string)
  • logical(a.k.a. boolean)

例如:mode(a) #numerictypeof(a) #double

types "integer" and "double" are returned as "numeric" mode.

class(), mode(), typeof() 三者的差异:

class() 对象的数据结构:vector、matrix、array、dataframe、list

mode() 对象数据类型。

typeof()查看数据元素类型,基本等同于mode(),比mode()更为详细

x <- 10.5
x <- 1000L
x <- 9i + 3
x <- "R is exciting"
x <- TRUE

注意

  1. TRUE/FALSE是全大写
  2. 复数是i,python里复数是j
  3. 要创建integer变量,必须L在整数值后面使用字母;如果不加L那一定是numeric变量。

您可以使用以下功能从一种类型转换为另一种类型:

  • as.numeric()
  • as.integer()
  • as.complex()
x <- 1L
a <- as.numeric(x)
class(a)
  • min()andmax()函数可用于查找集合中的最小或最大数字
  • sqrt()
  • abs()
  • ceiling(), floor()
  • sign() 正数返回1,负数返回-1,0返回0.

字符串

  • nchar()求字符串长度
  • grepl()检查字符串中是否存在字符或字符序列,return TRUE/FALSE, grepl("H", str)
  • paste()函数连接两个字符串 paste(str1, str2)
  • 转义字符\

注意:

  1. "'是等价的
  2. 正常情况下character就是用一行输出,如果加上cat()会按照代码块里的换行格式输出。
str<-"Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua." cat(str)
  1. 如果使用了转义字符,直接用变量名输出会显示\。如果不像要\, 就用cat()

Logical

注意是TRUEFALSE, 可以用TF代替。

operator

  • ^ Exponent
  • %% 取模
  • %/% 整除(余数部分不要)

赋值

  • <-
  • <<- 全局赋值
  • 也可以改变赋值运算符的方向。x <- 3 等于 3 -> x

比较运算符

  • ==
  • !=
  • =

逻辑运算符

  • 按位& |
  • 逻辑&&,||,!

其他运算符

  • : 生成一组数 x <- 1:10
  • %in% Find out if an element belongs to a vectorx %in% y
  • %*% 矩阵乘法x <- Matrix1 %*% Matrix2

Vectors

向量默认是列向量

# Vectors
fruits <- c("banana","apple","orange")
vec_seq3 <- seq(1, 10, by = 3)
vec_pattern <- rep(1:3, times = 4) #123重复4次
vec_pattern2 <- rep(1:3, times = 4, each = 2) #112233重复4次
numbers <-1:10 #默认间隔为1
numbers1 <-1.5:6.5 #默认间隔为1,左闭右闭[]
numbers2 <-1.5:6.3 #默认间隔为1,这里最后一个数是5.5
numbers <- seq(from=0, to=100, by=20) #生成其他间隔的序列数据 fruits[1]
fruits[c(1,3)] #索引访问第1个元素、和第3个元素。R中索引从1开始。支持负索引。 fruits[1] <-"pear"

注意:

  • 索引从1开始
  • 1:10是左闭右闭的

向量计算

vec <- c(1, 2, 5)
vec * 2 #每个位置上的数都会*2
Vectors Functions
  • length()
  • sort()

Factors

Factor 用来处理 categorize data.

four_seasons <- c("spring", "summer", "autumn", "winter")
four_seasons_factor <- factor(four_seasons) ##factor出来会变成字母序,可以指定levels
four_seasons_factor <- factor(four_seasons, levels = c("spring", "summer", "autumn", "winter")) four_seasons_factor[1]
four_seasons_factor[1] <- "no_spring" #只能赋成levels里已经存在的factor
Factors Functions```

library(UsingR)

data <- kid.weights

summary(data)

- `length()` 输出factor的个数
- `levels(data_factor)` 只想输出levels ##### 数据类型转换 R 中向量里每个元素的类型是一样的,若不同,会强制转换成一致的。
>character > numeric > logical
> double > integer ### Lists
List 可以包含多种数据类型
```{r}
thislist <- list("apple",TRUE,123)
thislist[1]
thislist[1] <-"blackcurrant"

Lists Functions

  • length()
  • %in% 看一个元素是否在list
  • append() append(thislist,"orange", after =2)
  • index(索引)的使用thislist[2:5]
  • 组合两个list
list1 <- list("a", "b", "c")
list2 <- list(1,2,3)
list3 <- c(list1,list2)

矩阵

mat <- matrix(data = c(2, 4, 6, 7, 8, 10), nrow = 2, ncol = 3, 	byrow = FALSE) #默认按着列来排
mat[2,] #访问第二行
mat[,3] #访问第三列
mat[2,3]#访问(2,3)
mat[c(1,2),]#访问1,2行
newmatrix <- cbind(mat, c("strawberry", "blueberry", "raspberry")) #column combination加上一列,list的长度必须和矩阵的行数相同
newmatrix <- rbind(mat, c("strawberry", "blueberry", "raspberry")) #row combination
mat <- mat[-c(1), -c(1)] #删除第一行和第一列

一些函数

  • %in%看矩阵中有没有对应元素 "apple" %in% thismatrix
  • dim() 看矩阵几行几列
  • length()看矩阵一共有多少元素
  • rbind()rbind()也可以用于合并两个矩阵Matrix_Combined <- rbind(Matrix1, Matrix2)
  • *是两个矩阵对应的点相乘
  • %*%是矩阵乘法
矩阵计算函数
t(A) #取转置
diag(A) #square matrix 求对角
det(A)
solve(A) #inverse
eigen(A)
sum(A) #每个位置上的数的和
mean(Aˆ2) #其他运算符同理
Aˆ2 #每个位置上的数平方
A * B #对应位置上的数相乘
B %*% C #叉乘

Arrays

定义高维矩阵(数组)

arr <- array(1:24, c(4, 3, 2), dimnames = list(dim1, dim2, dim3))
arr[2,3,2]
arr[c(1),,1] #仍然可以使用雷同的访问方式

Dataframe

每一列可以数据类型不同,但是同一列里数据类型必须相同。

df <- data.frame(name = c("Alice", "Bob", "Carl"),
age = c(23, 34, 23),
marriage = c(TRUE, FALSE, TRUE),
color = c("red", "blue", "orange")) #访问一列有三种方式
df[1]
df[["name"]]
df$name #删除第一行和第一列
Data_Frame_New <- df[-c(1), -c(1)]

Dataframe functions

  • summary(df) 可以求df每一列的general统计数据
  • cbind()rbind()也可以用于合并两个dataframe New_row_DF <- rbind(Data_Frame, c("Strength", 110, 110))
  • ncol(df), nrow(df)来求列数和行数
  • dim(df)
  • length()

数值计算函数

sum(1:8)
prod(3:5) #product
min(c(1, 5, -10, 300))
max(c(9, 2, -2))
range(c(1, 5, -10, 300))
mean(1:10)
var(1:10)
sd(1:10)
median(1:10)
quantile(1:10) factorial(4)
exp(0:3)
log(1:10)
round(3.833) #默认是四舍五入到整数
round(3.833, digits = 1)
ceiling(3.83)
floor(3.83)
choose(4, 2) #组合数 which(c(1, 6, -3, -7, 0) <= 0)
any(c(1, 6, -3, -7, 0) <= 0)
all(c(1, 6, -3, -7, 0) <= 0)

IF ELSE

和C++语法一样

if (b > a) {
("b is greater than a")
} else if (a == b) {
print("a and b are equal")
} else {
print("a is greater than b")
}

WHILE

语法同C++

区别

  • C++中是continue, R里是next

FOR

#sequential index
for (x in 1:10) {
print(x)
} #list
fruits <- list("apple", "banana", "cherry")
for (x in fruits) {
print(x)
} #matrix
for (rows in 1:nrow(thismatrix)) {
for (columns in 1:ncol(thismatrix)) {
print(thismatrix[rows, columns])
}
} #array
for(x in multiarray){
print(x)
}

FUNCTION

my_function <- function(fname = 'no_name') {
paste(fname, "Griffin")
return "hhhh"
} my_function("Peter")

R中可以function里定义function

Outer_func <- function(x) {
Inner_func <- function(y) {
a <- x + y
return(a)
}
return (Inner_func)
}
output <- Outer_func(3) # To call the Outer_func
output(5) # To call Inner_func

全局变量

  • 在函数之外定义的是全局变量
  • 如果使用赋值运算符<<-,则变量属于全局范围
  • 如果要更改函数内的全局变量,请使用全局赋值运算符

lecture2上节课剩下的

x<-cbind(x1=3,x2=c(4:1,2:4))
dimnames(x)[[1]]<-letters[1:7] n_col<-ncol(x)
col_sum<-rep(0,n_col)
for(j in 1:n_col){
col_sum[j]<-sum(x[,j])
}
col_sum
names(col_sum) <- colnames(x)

事实上,上面的代码可以直接用apply实现

两种方式:

  1. edit()自动生成一个红色的表格,列名会自动的放上去,不够的会显示var5,var6,var7
mydata <- data.frame(
age = numeric(0),
gender = character(0),
weight = numeric(0)
)
mydata <- edit(mydata)
  1. read.table(file,options)
mydatatxt <- "
age gender weight
25 m 166
30 f 115
18 f 120 "
mydata <- read.table(header = TRUE, text = mydatatxt)

options:

  • header
  • sep delimiter 分隔符
  • row.names
  • col.names
  • na.strings
  1. read_table(), read_csv(), read_csv2(), read_delim(), read_delim2()除了默认的分隔符不同,其他都是相同的,csv是逗号,delim是tab(tsv)。

数据集的一些基本操作

  1. head()输出dataframe的前六行
  2. Length查看一列的所有的值
  3. attach & detach添加和删除路径索引
  4. is.data.frame(A)返回一个logical值

R的基本用法2的更多相关文章

  1. ruby 中%Q %q %W %w %x %r %s的用法

    %Q 用于替代双引号的字符串. 当你需要在字符串里放入很多引号时候, 可以直接用下面方法而不需要在引号前逐个添加反斜杠 (\") >> %Q(Joe said: "Fr ...

  2. R语言︱list用法、批量读取、写出数据时的用法

    列表是一种特别的对象集合,它的元素也由序号(下标)区分,但是各元素的类型可 以是任意对象,不同元素不必是同一类型.元素本身允许是其它复杂数据类型,比如,列表 的一个元素也允许是列表.例如: > ...

  3. [Ruby]转载: 关于ruby中 %Q, %q, %W, %w, %x, %r, %s 的用法

    单引号内的内容,ruby会原样输出 双引号内的内容,ruby会解析 我们看个简单的例子,针对字符串      #{foo}test     我们分别用单引号核双引号操作 '#{foo}test'   ...

  4. cmd for 用法

    1:for命令及变量 基本格式: FOR /参数 %variable IN (set) DO command [command_parameters] %variable:指定一个单一字母可替换的参数 ...

  5. R语言︱函数使用技巧(循环、if族/for、switch、repeat、ifelse、stopifnot)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 后续加更内容: 应用一:if族有哪些成员呢?- ...

  6. R语言︱构造新序列

    1.数值构造函数rep与seq #数值构造rep与seq rep(1:4,each=2)#依次重复1:4两遍 rep(1:4,2) #注意,重复1:4两遍 seq(from=3,to=5,by=0.2 ...

  7. R语言︱文件读入、读出一些方法罗列(批量xlsx文件、数据库、文本txt、文件夹)

    笔者寄语:小规模的读取数据的方法较为简单并且多样,但是,批量读取目前看到有以下几种方法:xlsx包.RODBC包.批量转化成csv后读入. R语言中还有一些其他较为普遍的读入,比如代码包,R文件,工作 ...

  8. python基础_格式化输出(%用法和format用法)

      目录 %用法 format用法 %用法 1.整数的输出 %o —— oct 八进制%d —— dec 十进制%x —— hex 十六进制 1 >>> print('%o' % 2 ...

  9. python基础_格式化输出(%用法和format用法)(转载)

    python基础_格式化输出(%用法和format用法) 目录 %用法 format用法 %用法 1.整数的输出 %o -- oct 八进制%d -- dec 十进制%x -- hex 十六进制 &g ...

  10. js2py 的用法

    python调用js的方法 js2py的简单用法 import js2py js = """ function add(a, b) { return a + b } &q ...

随机推荐

  1. 关于php pconnect长连接如何刷新连接的讨论

    由于每个pconnect所建立的连接信息和单个进程绑定.线上偶发了redis在某一台机器php-fpm上连接正常而无法进行任何操作的问题. 先说结论 查看redis拓展官方文档 close方法 有一句 ...

  2. python跨文件之全局变量

    Python中的global关键字,你了解吗? - 知乎 (zhihu.com)  global 关键字 python跟C不一样,c是在一个文件定义后在另一个文件声明下是extern变量就好.pyth ...

  3. redis缓存lua脚本过多导致内存占用很多问题

    现象 生产某集群各节点已使用内存比较大,在清理了大量业务无用数据后,节点已使用内存却未下降. 排查与分析 通过info memory命令查看,内存碎片率略高,但是对某个主节点新添加的从节点内存使用依然 ...

  4. 【内存管理】ION内存管理器浅析(system contig heap)

    system contig heap与system heap 从代码中我们看到system contig heap与system heap同属一个文件中,ion_system_heap.c 相同点:它 ...

  5. 2020/03/24 HTML基础复习笔记

    2020-03-24 15:49:30 下午好! 这是我开通博客的第二天也是在钉钉上网课的又一天,为了应对考试现在复习到了HTML基础知识,本打算用VS敲想了想还是用了XMind(真的好用!!!)文件 ...

  6. C# Nilakantha级数逼近PI算法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. 介绍String、StringBuffer和StringBuilder

    1. String类:  位于java.lang包,早期版本JDK1.0,继承Object类,实现java.io.Serializable, Comparable<String>, Cha ...

  8. MSVC设置版本

    MSVC设置版本 在开发QT时,由于QT 5.12与MSVC 2017兼容,因此需要用MSVC 2017来编译使用QT 5.12的程序. 1 安装MSVC 2017 由于笔者电脑上安装的Visual ...

  9. 【Leetcode】 剑指offer:链表(简单)--Day02

    剑指Offer 06. 从尾到头打印链表 可借助栈. 或先遍历列表得到元素数,开辟数组空间倒序填入. 剑指 Offer 24. 反转链表 可借助栈: class Solution { public L ...

  10. Linux完全卸载mysql的方式

    //rpm包安装方式卸载查包名:rpm -qa|grep -i mysql删除命令:rpm -e –nodeps 包名 //yum安装方式下载1.查看已安装的mysql命令:rpm -qa | gre ...