R_基礎(chǔ)語(yǔ)法自用速查

R

[TOC]

安裝與調(diào)試

退出解釋器:q()
命令行運(yùn)行:Rscript filename.R

基礎(chǔ)語(yǔ)法

變量與基礎(chǔ)操作

查看已定義的變量列表:ls()
print(ls()) 
刪除變量:rm()
rm(varname)
輸出結(jié)果拼接:cat()

用逗號(hào)分隔拼接部分

內(nèi)容輸出到文件:cat(內(nèi)容账锹,file=“filepath”[,append=TRUE])

建議用絕對(duì)路徑, Windows 路徑格式為 D:\r_test.txt艾扮。

append表示追加寫(xiě)入回怜,不添加時(shí)為覆蓋

控制臺(tái)輸出到文件:sink("filepath"[,split=TRUE] [,append=TRUE])

split表示保留控制臺(tái)輸出疮茄。

默認(rèn)是覆蓋寫(xiě)入瞬捕。

調(diào)用無(wú)參數(shù)sink()可以取消

從文件讀入文字:readLines("filepath")
獲取當(dāng)前工作目錄 :getwd()
設(shè)置當(dāng)前工作目錄: setwd()
整除與整除求余:%%,%/%查蓉。

優(yōu)先級(jí)僅次于乘方和括號(hào)

冒號(hào)運(yùn)算符/整數(shù)向量/向量運(yùn)算相關(guān): :
 v <- 1:10
 print(v) 

輸出:1 2 3 4 5 6 7 8 9 10

判斷數(shù)字是否在向量v/向量運(yùn)算相關(guān):num %in% v
矩陣與它轉(zhuǎn)置的矩陣相乘/矩陣運(yùn)算:M %*% t(M)
數(shù)學(xué)函數(shù):
sqrt(n) n的平方根
exp(n) 自然常數(shù)e的n次方,
log(m,n) m的對(duì)數(shù)函數(shù)呀打,返回n的幾次方等于m
log10(m) 相當(dāng)于log(m,10)
round (n) 對(duì) n 四舍五入取整
(n, m) 對(duì) n 保留 m 位小數(shù)四舍五入
ceiling (n) 對(duì) n 向上取整
floor (n) 對(duì) n 向下取整
NA與NULL

缺失矢赁,沒(méi)有值,但位置存在

數(shù)據(jù)不存在

向量

生成:a=c(l,r)贬丛。 可通過(guò)數(shù)組下標(biāo)取用撩银,從1開(kāi)始。

可能有間隙的等差數(shù)列:seq(l,r,gap)

m到n的等差數(shù)列:seq(l,r,step)

重復(fù)數(shù)列:rep(num瘫寝,重復(fù)次數(shù))

> a = c(10, 20, 30, 40, 50)
> a[2]
[1] 20

> a[1:4] # 取出第 1 到 4 項(xiàng)蜒蕾,包含第 1 和第 4 項(xiàng)
[1] 10 20 30 40
> a[c(1, 3, 5)] # 取出第 1, 3, 5 項(xiàng)
[1] 10 30 50
> a[c(-1, -5)] # 去掉第 1 和第 5 項(xiàng)
[1] 20 30 40

可以對(duì)向量做標(biāo)量運(yùn)算、邏輯運(yùn)算焕阿,效果是每個(gè)元素依次運(yùn)算

排序:sort咪啡、rev(反向)、order(返回向量排序后的下標(biāo))暮屡、a[order(a)]輸出的是排序后的向量

統(tǒng)計(jì)學(xué)函數(shù):

sum 求和
mean 求平均值
var 方差
sd 標(biāo)準(zhǔn)差
min 最小值
max 最大值
range 取值范圍(二維向量撤摸,最大值和最小值)

篩選: (vector[which(vector >= a & vector < b)]

all\any。 all() 用于檢查邏輯向量是否全部為 TRUE褒纲,any() 用于檢查邏輯向量是否含有 TRUE准夷。

字符串
> toupper("Runoob") # 轉(zhuǎn)換為大寫(xiě)

[1] "RUNOOB"

> tolower("Runoob") # 轉(zhuǎn)換為小寫(xiě)

[1] "runoob"

> nchar("中文", type="bytes") # 統(tǒng)計(jì)字節(jié)長(zhǎng)度

[1] 4

> nchar("中文", type="char") # 總計(jì)字符數(shù)量

[1] 2

> substr("123456789", 1, 5) # 截取字符串,從 1 到 5

[1] "12345"

> substring("1234567890", 5) # 截取字符串莺掠,從 5 到結(jié)束

[1] "567890"

> as.numeric("12") # 將字符串轉(zhuǎn)換為數(shù)字

[1] 12

> as.character(12.34) # 將數(shù)字轉(zhuǎn)換為字符串

[1] "12.34"

> strsplit("2019;10;1", ";") # 分隔符拆分字符串

[[1]]

[1] "2019" "10"   "1"

> gsub("/", "-", "2019/10/1") # 替換字符串

[1] "2019-10-1"

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

[1] "a1=b2=c3=d4=e5=f6" # 拼接衫嵌,cpllapse是拼接的連接

> format(x, digits, nsmall, scientific, width, justify = c("left", "right", "centre", "none"))

    #     x : 輸入對(duì)向量

    #   digits : 顯示的位數(shù)

    #   nsmall : 小數(shù)點(diǎn)右邊顯示的最少位數(shù)

    #   scientific : 設(shè)置科學(xué)計(jì)數(shù)法

    #   width : 通過(guò)開(kāi)頭填充空白來(lái)顯示最小的寬度

    #   justify:設(shè)置位置,顯示可以是左邊彻秆、右邊楔绞、中間等。

如果在 UTF-8 編碼的計(jì)算機(jī)上運(yùn)行唇兑,單個(gè)中文字符的字節(jié)長(zhǎng)度應(yīng)該是 3酒朵。

列表,一種筐

創(chuàng)建: list_data <- list( )

命名: names(list_data) <- c("Sites", "Numbers", "Lists")

訪問(wèn): 1.按下標(biāo) 2.按名字print(list_data$Name)

添加: list_data[最后一個(gè)下標(biāo)+1] <- "新元素" 也可用于更新

刪除: list_data[4] <- NULL

合并: merged.list <- c(list1,list2)

列表轉(zhuǎn)向量: v1 <- unlist(list1)

矩陣

v=c() m= matrix(vector,行數(shù),列數(shù),byrow=,dimnames=) 向量會(huì)逐列填充,添加byrow為T(mén)RUE會(huì)按行填充扎附,dimaname用于設(shè)置行列名

rownames = c("row1", "row2", "row3", "row4")
colnames = c("col1", "col2", "col3")

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

查詢:按二維數(shù)組查詢

命名:行列都可以設(shè)定名稱(chēng):

> colnames(m1) = c("x", "y", "z")
> rownames(m1) = c("a", "b")
> m1
  x y z
a 1 2 3
b 4 5 6
> m1["a", ]
x y z
1 2 3

矩陣乘法:

> m1 = matrix(c(1, 2), 1, 2)
> m2 = matrix(c(3, 4), 2, 1)
> m1 %*% m2
     [,1]
[1,]   11

矩陣乘除:* / 按位逐個(gè)相互運(yùn)算

逆矩陣:solve(A)

轉(zhuǎn)置矩陣:t()

矩陣分行分列計(jì)算: apply()蔫耽。如apply(A, 1, sum)。參數(shù)為1按行操作留夜,參數(shù)為2按列操作

數(shù)組
# 創(chuàng)建兩個(gè)不同長(zhǎng)度的向量
vector1 <- c(5,9,3)
vector2 <- c(10,11,12,13,14,15)
column.names <- c("COL1","COL2","COL3")
row.names <- c("ROW1","ROW2","ROW3")
matrix.names <- c("Matrix1","Matrix2")

# 創(chuàng)建數(shù)組匙铡,并設(shè)置各個(gè)維度的名稱(chēng)
result <- array(c(vector1,vector2),dim = c(3,3,2),dimnames = list(row.names,column.names,matrix.names))
print(result)

# 顯示數(shù)組第一個(gè)矩陣中第一行第三列的元素,三個(gè)參數(shù)分別是行列個(gè)
print(result[1,3,1])

# 跨維度計(jì)算 數(shù)組 數(shù)據(jù)名稱(chēng) 計(jì)算函數(shù)
apply(x, margin, fun)

# 計(jì)算數(shù)組中所有矩陣第一行的數(shù)字之和
result <- apply(new.array, c(1), sum)
print(result)
因子(類(lèi)別數(shù)據(jù))
factor(x = character(), levels, labels = levels,
       exclude = NA, ordered = is.ordered(x), nmax = NA)
x <- c("男", "女", "男", "男",  "女")
sex <- factor(x)
print(sex)
print(is.factor(sex))

[1] 男 女 男 男 女
Levels: 男 女
[1] TRUE
# levels 類(lèi)別 nlevels 類(lèi)別數(shù)目
數(shù)據(jù)框(dataframe 表格)
  • : 列向量,可以是任何類(lèi)型(字符型碍粥、數(shù)值型、邏輯型)即纲,一般以 tag = value 的形式表示,也可以是 value低斋。
  • row.names: 行名,默認(rèn)為 NULL膊畴,可以設(shè)置為單個(gè)數(shù)字、字符串或字符串和數(shù)字的向量唇跨。
  • check.rows: 檢測(cè)行的名稱(chēng)和長(zhǎng)度是否一致衬衬。
  • check.names: 檢測(cè)數(shù)據(jù)框的變量名是否合法改橘。
  • fix.empty.names: 設(shè)置未命名的參數(shù)是否自動(dòng)設(shè)置名字。
  • stringsAsFactors: 布爾值飞主,字符是否轉(zhuǎn)換為因子,factory-fresh 的默認(rèn)值是 TRUE碌识,可以通過(guò)設(shè)置選項(xiàng)(stringsAsFactors=FALSE)來(lái)修改。
data.frame(…, row.names = NULL, check.rows = FALSE,
           check.names = TRUE, fix.empty.names = TRUE,
           stringsAsFactors = default.stringsAsFactors())
table = data.frame(
    姓名 = c("張三", "李四"),
    工號(hào) = c("001","002"),
    月薪 = c(1000, 2000)
   
)
print(table) # 查看 table 數(shù)據(jù)

# 獲取數(shù)據(jù)結(jié)構(gòu)
str(table)
# 顯示概要
print(summary(table)) 
# 提取指定的列
result <- data.frame(table$姓名,table$月薪)
print(result)
# 讀取第 2 筏餐、3 行的第 1 、2 列數(shù)據(jù):
result <- table[c(2,3),c(1,2)]
# 添加部門(mén)列
table$部門(mén) <- c("運(yùn)營(yíng)","技術(shù)","編輯")
# 將向量組合成數(shù)據(jù)框
addresses <- cbind(sites,likes,url)
# 合并兩個(gè)數(shù)據(jù)框
result <- rbind(table,newtable)
數(shù)據(jù)重塑(=sql的join魁瞪,用的時(shí)候再看,估計(jì)用不上佩番,大概)
  • x, y: 數(shù)據(jù)框
  • by, by.x, by.y:指定兩個(gè)數(shù)據(jù)框中匹配列名稱(chēng)众旗,默認(rèn)情況下使用兩個(gè)數(shù)據(jù)框中相同列名稱(chēng)。
  • all:邏輯值; all = L 是 all.x = L 和 all.y = L 的簡(jiǎn)寫(xiě)趟畏,L 可以是 TRUE 或 FALSE贡歧。
  • all.x:邏輯值,默認(rèn)為 FALSE赋秀。如果為 TRUE, 顯示 x 中匹配的行利朵,即便 y 中沒(méi)有對(duì)應(yīng)匹配的行,y 中沒(méi)有匹配的行用 NA 來(lái)表示猎莲。
  • all.y:邏輯值绍弟,默認(rèn)為 FALSE。如果為 TRUE, 顯示 y 中匹配的行著洼,即便 x 中沒(méi)有對(duì)應(yīng)匹配的行樟遣,x 中沒(méi)有匹配的行用 NA 來(lái)表示。
  • sort:邏輯值身笤,是否對(duì)列進(jìn)行排序豹悬。
# merge函數(shù)
merge(x, y, by = intersect(names(x), names(y)),
      by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,
      sort = TRUE, suffixes = c(".x",".y"), no.dups = TRUE,
      incomparables = NULL, …)

https://www.runoob.com/r/r-data-reshaping.html

分支語(yǔ)句

if語(yǔ)句:和c一樣
switch:switch(expression, case1, case2, case3....)
#1.按值匹配。整數(shù)匹配不在范圍內(nèi)的則返回NULL液荸。
x <- switch(
   3,
   "google",
   "runoob",
   "taobao",
   "weibo"
)
print(x)
[1] "taobao"

#2.按變量匹配
you.like<-"runoob"
switch(you.like, google="www.google.com", runoob = "www.runoob.com", taobao = "www.taobao.com")
[1] "www.runoob.com"

循環(huán)語(yǔ)句

repeat

循環(huán)瞻佛,直到condition為true,退出用break

repeat { 
    // 相關(guān)代碼 
    if(condition) {
       break
    }
}
while

和c一樣

for

和python一樣

next

和continue一樣

函數(shù)(全是懶加載)

定義函數(shù)
function_name <- function(arg_1, arg_2, ...) {
    // 函數(shù)體
}
調(diào)用

和python一樣娇钱。

如果指定參數(shù)名和對(duì)應(yīng)值伤柄,使用時(shí)可不按順序排列傳遞參數(shù)

內(nèi)置函數(shù)

seq(a,b)輸出a到b

mean(a:b)輸出a绊困、b平均數(shù)

sum(a:b)計(jì)算a到b數(shù)字的和

庫(kù)

# 查看包安裝目錄
.libPaths()
# 查看已安裝的包
library()
# 安裝包 清華源
install.packages("MASS", repos = "https://mirrors.ustc.edu.cn/CRAN/") 

餅狀圖
  • x: 數(shù)值向量,表示每個(gè)扇形的面積适刀。

  • labels: 字符型向量秤朗,表示各扇形面積標(biāo)簽。

  • edges: 這個(gè)參數(shù)用處不大蔗彤,指的是多邊形的邊數(shù)(圓的輪廓類(lèi)似很多邊的多邊形)。

  • radius: 餅圖的半徑疯兼。

  • main: 餅圖的標(biāo)題然遏。

  • clockwise: 是一個(gè)邏輯值,用來(lái)指示餅圖各個(gè)切片是否按順時(shí)針做出分割。

  • angle: 設(shè)置底紋的斜率吧彪。

  • density: 底紋的密度待侵。默認(rèn)值為 NULL。

  • col: 是表示每個(gè)扇形的顏色姨裸,相當(dāng)于調(diào)色板。

pie(x, labels = names(x), edges = 200, radius = 0.8,
    clockwise = FALSE, init.angle = if(clockwise) 90 else 0,
    density = NULL, angle = 45, col = NULL, border = NULL,
    lty = NULL, main = NULL, …)
# 輸出圖片
png(file='runoob-pie.png', height=300, width=300)
# 數(shù)據(jù)準(zhǔn)備
info = c(1, 2, 4, 8)

# 命名
names = c("Google", "Runoob", "Taobao", "Weibo")

# 涂色(可選)
cols = c("#ED1C24","#22B14C","#FFC90E","#3f48CC")
# 計(jì)算百分比
piepercent = paste(round(100*info/sum(info)), "%")
# 繪圖
pie(info, labels=piepercent, main = "網(wǎng)站分析", col=cols, family='GB1')
# 添加顏色樣本標(biāo)注
legend("topright", names, cex=0.8, fill=cols)
#3D圖
library(plotrix)
pie3D(info,labels = names,explode = 0.1, main = "3D 圖",family = "STHeitiTC-Light")
條形圖
  • H 向量或矩陣那先,包含圖表用的數(shù)字值售淡,每個(gè)數(shù)值表示矩形條的高度慷垮。

  • xlab x 軸標(biāo)簽料身。

  • ylab y 軸標(biāo)簽。

  • main 圖表標(biāo)題贮泞。

  • names.arg 每個(gè)矩形條的名稱(chēng)隙畜。

  • col 每個(gè)矩形條的顏色议惰。

  • 中文字體需要設(shè)置字體參數(shù) family='GB1'

  • beside 參數(shù) beside 設(shè)置矩形條堆疊的方式乡恕,默認(rèn)為 FALSE

    library(showtext);
    font_add("SyHei", "SourceHanSansSC-Bold.otf");
    cvd19 = matrix(
      c(83017, 83534, 1794546, 2640626, 190535, 585493),
      2, 3
    )
    
    # 設(shè)置文件名,輸出為 png
    png(file = "runoob-bar-1.png")
    
    #加載字體
    showtext_begin();
    
    colnames(cvd19) = c("中國(guó)", "美國(guó)", "印度")
    rownames(cvd19) = c("6月", "7月")
    barplot(cvd19, main = "新冠疫情條形圖", beside=TRUE, legend=TRUE,  family='SyHei')
    
    # 去掉字體
    showtext_end();
    
散點(diǎn)圖
  • x 橫坐標(biāo) x 軸的數(shù)據(jù)集合
  • y 縱坐標(biāo) y 軸的數(shù)據(jù)集合
  • type:繪圖的類(lèi)型夫啊,p 為點(diǎn)辆憔、l 為直線, o 同時(shí)繪制點(diǎn)和線熊榛,且線穿過(guò)點(diǎn)玄坦。
  • main 圖表標(biāo)題煎楣。
  • xlab车伞、ylab x 軸和 y 軸的標(biāo)簽名稱(chēng)另玖。
  • xlim、ylim x 軸和 y 軸的范圍赂弓。
  • axes 布爾值盈魁,是否繪制兩個(gè) x 軸窃诉。

type 參數(shù)可選擇值:

  • p:點(diǎn)圖
  • l:線圖
  • b:同時(shí)繪制點(diǎn)和線
  • c:僅繪制參數(shù) b 所示的線
  • o:同時(shí)繪制點(diǎn)和線飘痛,且線穿過(guò)點(diǎn)
  • h:繪制出點(diǎn)到橫坐標(biāo)軸的垂直線
  • s:階梯圖,先橫后縱
  • S:階梯圖车柠,先縱后豎
  • n: 空?qǐng)D
#普通散點(diǎn)圖
plot(x, y, type="p", main, xlab, ylab, xlim, ylim, axes)

#散點(diǎn)圖矩陣
# 4 個(gè)變量繪制矩陣竹祷,12 個(gè)圖塑陵,第一個(gè)參數(shù)是各個(gè)變量
pairs(~wt+mpg+disp+cyl,data = mtcars, main = "Scatterplot Matrix")
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末令花,一起剝皮案震驚了整個(gè)濱河市兼都,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌输瓜,老刑警劉巖芬萍,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柬祠,死亡現(xiàn)場(chǎng)離奇詭異漫蛔,居然都是意外死亡莽龟,警方通過(guò)查閱死者的電腦和手機(jī)锨天,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)病袄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)益缠,“玉大人,你說(shuō)我怎么就攤上這事宋欺∑浚” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵雨席,是天一觀的道長(zhǎng)陡厘。 經(jīng)常有香客問(wèn)我糙置,道長(zhǎng)是目,這世上最難降的妖魔是什么懊纳? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任嗤疯,我火速辦了婚禮,結(jié)果婚禮上戏罢,老公的妹妹穿的比我還像新娘龟糕。我一直安慰自己悔耘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布催首。 她就那樣靜靜地躺著郎任,像睡著了一般备籽。 火紅的嫁衣襯著肌膚如雪分井。 梳的紋絲不亂的頭發(fā)上尺锚,一...
    開(kāi)封第一講書(shū)人閱讀 52,262評(píng)論 1 308
  • 那天瘫辩,我揣著相機(jī)與錄音坛悉,去河邊找鬼。 笑死挣轨,一個(gè)胖子當(dāng)著我的面吹牛卷扮,可吹牛的內(nèi)容都是我干的均践。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼抖甘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了薇宠?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤椒涯,失蹤者是張志新(化名)和其女友劉穎废岂,沒(méi)想到半個(gè)月后湖苞,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡财骨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年该贾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捌臊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片理澎。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡矾端,死狀恐怖秩铆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情殴玛,我是刑警寧澤滚粟,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布凡壤,位于F島的核電站,受9級(jí)特大地震影響曹体,放射性物質(zhì)發(fā)生泄漏硝烂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一串稀、第九天 我趴在偏房一處隱蔽的房頂上張望狮杨。 院中可真熱鬧,春花似錦微酬、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)比吭。三九已至,卻和暖如春吧慢,著一層夾襖步出監(jiān)牢的瞬間检诗,已是汗流浹背瓢剿。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工间狂, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鉴象,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓檀夹,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親桶良。 傳聞我的和親對(duì)象是個(gè)殘疾皇子洞翩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容