前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R3数据结构和文件读取

R3数据结构和文件读取

原创
作者头像
用户10556374
修改2023-05-15 23:25:52
2.7K0
修改2023-05-15 23:25:52
举报
文章被收录于专栏:生信学习~~~生信学习~~~

title: "note3"

output: html_document

date: "2023-05-14"


R Markdown

代码语言:text
复制
#复习#
#1数据结构包含4种,向量(一维),数据框,矩阵,列表,数据类型包括3种,数字,字符,逻辑,数据类型转换as(chat查询想要转换的东西对应的函数)
#2向量生成4种,c,:,(rep重复,seq(取出坐标为偶数的基因名),rnorm一组符合正态分布的数字),组合paste0)
#注释1seq()函数可以生成-3到3之间的100个数的等差数列,代码如下:seq <- seq(-3, 3, length.out=100)其中,seq是我们生成的变量名,第一个参数表示起始值,第二个参数表示结束值,第三个参数length.out表示需要生成的数字数量。通过这个函数生成的seq变量将包含100个在-3到3之间的数字。形式参数,实际参数可以改动.括号前面的代表函数,函数()=前面的部分是形式参数,可以省略不写,后面是实际参数,使用的时候可以修改的。[]前面是数据框或矩阵,[[]]前面是列
#3单个向量4种操作:
#(1)赋值加输出(2)数学计算,(3)条件判断生成的是逻辑值,生成长度相等的逻辑值(x==y,向量不一样长时,谁长取谁,(4)初级统计,(第一次出现视为没有重复)length(X判断向量长度,连接paste0(rep(“studengt”,length(x),x)3个向量不一样长时,谁长取谁),unique去重复,输出的是数据,duplicated判断是否有重复,输出的是逻辑值,tabie(统计重复值是哪些,每个重复值有几次),sort(x,decreasing =T)(=前面是形式参数,后面是实际参数,有的实际参数会有默认数值,这是用户可修改的)
#4两个向量进行的操作,4种
#(1)比较运算(逻辑比较),循环补齐,生成等长的逻辑向量(向量不一样长时,谁长取谁)(等位运算,向量长度不相等时,发生循环补齐,等位运算注意非整倍数有时会造成结果错误,如x$Species==c("a","c"))(2)数学计算(3)连接paste0,循环补齐,生成等长的逻辑向量(4)交集intersect会去重复(所以两个向量取子集,有哪些重复时,结果可能会出错,需要用%in%)、%in%,输出的是逻辑值(x[x%in%y],此时理解函数意义,x有哪些元素在y存在(会每个位置都比较),而x==y对应位置相同,所以会循环补齐)不会去重复、并集union、差集setdiff(x有哪些元素在y不存在)
#重点向量筛选(取子集)[]:中括号里面是向量(有4种生成方式)将TRUE对应的值挑选出来,FALSE丢弃。(1)按照逻辑值([]里面是逻辑值,与x对应,不必由x生成):中括号里是与x等长且一一对应的逻辑值向量(13个彩色球取出蓝色和绿色,x[x%in%y],13个数取>7,x[x>7]);(2)按照位置:中括号里是由x的下标组成的向量,x[2:4],x[c(1,5)],反选x[-4]#去掉第四个位置x[-(2:4)]#去掉234的位置(3)按名字
#修改向量中的某个/某些元素:取子集+赋值,改一个元素x[4]<-40;x;改多个元素x[c(1,5)] <- c(80,20);x
#part3 二维:数据框(data.frame,每列只允许一种数据类型,每列数据类型相同也可以),矩阵(matrix,只允许一种数据类型),列表(list),用class判断数据结构,因为有的函数只接受特定的数据类型,可用as转换(chat查询想要转换的东西对应的函数),可用view查看数据
#重点数据框1.虚拟文件,打开R才可见,不是真实电脑文件2.数据框要求每列数据的类型相同3.数据框单独拿出一列是向量,降维,
#1.数据框data.frame来源
# (1)用代码新建,,变量 <- data.frame()
# (2)由已有数据转换或处理得到,变量 <-read.csv/table(按TAB键导入文件名,不要手动输入)
# (3)读取表格文件view,dim,nrow,ncol,rownames,colnames,修改和取子集
# (4)R语言内置数据iris,volcano,letters,可用view查看数据

#2.新建和读取数据框
df1 <- data.frame(gene   = paste0("gene",1:4),
                 change  = rep(c("up","down"),each = 2),
                 score   = c(5,3,-2,-4))
df1
代码语言:txt
复制
##    gene change score
## 1 gene1     up     5
## 2 gene2     up     3
## 3 gene3   down    -2
## 4 gene4   down    -4
代码语言:text
复制
df2 <- read.csv("gene.csv")
df2
代码语言:txt
复制
##    gene change score
## 1 gene1     up     5
## 2 gene2     up     3
## 3 gene3   down    -2
## 4 gene4   down    -4
代码语言:text
复制
#3.数据框属性
#
dim(df1)#统计行列数
代码语言:txt
复制
## [1] 4 3
代码语言:text
复制
nrow(df1)#统计行数,paste0(“a”,1;nrow(a))
代码语言:txt
复制
## [1] 4
代码语言:text
复制
ncol(df1)#统计列数,计算最后一列,取/不取子集最后一列,df1[,ncol(df1)],df1[,-ncol(df1)],
代码语言:txt
复制
## [1] 3
代码语言:text
复制
#
rownames(df1)#行名,本质是向量,修改全部行名或其中一个,本质还是向量修改
代码语言:txt
复制
## [1] "1" "2" "3" "4"
代码语言:text
复制
colnames(df1)#列名
代码语言:txt
复制
## [1] "gene"   "change" "score"
代码语言:text
复制
#改行名和列名
rownames(df1) <- c("r1","r2","r3","r4")
#只修改某一行/列的名
colnames(df1)[2] <- "CHANGE"
#4.数据框取子集1$一次只能取1列,2按坐标,名字(一次可以取多列),逻辑
df1$gene  #删掉score,按tab键取文件/文件列
代码语言:txt
复制
## [1] "gene1" "gene2" "gene3" "gene4"
代码语言:text
复制
mean(df1$score)
代码语言:txt
复制
## [1] 0.5
代码语言:text
复制
## 按坐标
df1[2,2]
代码语言:txt
复制
## [1] "up"
代码语言:text
复制
df1[2,]#取[行,]继承行名和列名,筛选test中,Species列的值为a或c的行,test[test$Species %in% c("a","c"),]
代码语言:txt
复制
##     gene CHANGE score
## r2 gene2     up     3
代码语言:text
复制
df1[,2]#取1列[,列],降维输出,没有,时取的是列
代码语言:txt
复制
## [1] "up"   "up"   "down" "down"
代码语言:text
复制
df1[c(1,3),1:2]
代码语言:txt
复制
##     gene CHANGE
## r1 gene1     up
## r3 gene3   down
代码语言:text
复制
## 按名字
df1[,"gene"]
代码语言:txt
复制
## [1] "gene1" "gene2" "gene3" "gene4"
代码语言:text
复制
df1[,c('gene','change')]#取多列,还是二维
代码语言:txt
复制
## Error in `[.data.frame`(df1, , c("gene", "change")): undefined columns selected
代码语言:text
复制
## 按条件(逻辑值),回到[]:将TRUE对应的值挑选出来,FALSE丢弃。筛选差异基因
df1[df1$score>0,]#某列中>0的行筛选出来,还是二维
代码语言:txt
复制
##     gene CHANGE score
## r1 gene1     up     5
## r2 gene2     up     3
代码语言:text
复制
#筛选score >0的基因,某列中>0的行中某列元素筛选出来,一维
df1[df1$score > 0,1]
代码语言:txt
复制
## [1] "gene1" "gene2"
代码语言:text
复制
df1$gene[df1$score>0]#相当于向量[逻辑值],逻辑值,与x对应,不必由x生成
代码语言:txt
复制
## [1] "gene1" "gene2"
代码语言:text
复制
## 代码思维
#如何取数据框的最后一列?
df1[,3]
代码语言:txt
复制
## [1]  5  3 -2 -4
代码语言:text
复制
df1[,ncol(df1)]
代码语言:txt
复制
## [1]  5  3 -2 -4
代码语言:text
复制
#如何取数据框除了最后一列以外的其他列?
df1[,-ncol(df1)]
代码语言:txt
复制
##     gene CHANGE
## r1 gene1     up
## r2 gene2     up
## r3 gene3   down
## r4 gene4   down
代码语言:text
复制
#筛选score > 0的基因
df1[df1$score > 0,1]
代码语言:txt
复制
## [1] "gene1" "gene2"
代码语言:text
复制
df1$gene[df1$score > 0]
代码语言:txt
复制
## [1] "gene1" "gene2"
代码语言:text
复制
#5.数据框修改

#改一个格
df1[3,3] <- 5
df1
代码语言:txt
复制
##     gene CHANGE score
## r1 gene1     up     5
## r2 gene2     up     3
## r3 gene3   down     5
## r4 gene4   down    -4
代码语言:text
复制
#改一整列,或在最后一列新增加一列(没有就新增,有就替换)
df1$score <- c(12,23,50,2)     
df1
代码语言:txt
复制
##     gene CHANGE score
## r1 gene1     up    12
## r2 gene2     up    23
## r3 gene3   down    50
## r4 gene4   down     2
代码语言:text
复制
#?
df1$p.value <- c(0.01,0.02,0.07,0.05) 
df1
代码语言:txt
复制
##     gene CHANGE score p.value
## r1 gene1     up    12    0.01
## r2 gene2     up    23    0.02
## r3 gene3   down    50    0.07
## r4 gene4   down     2    0.05
代码语言:text
复制
#改行名和列名
rownames(df1) <- c("r1","r2","r3","r4")
#只修改某一行/列的名
colnames(df1)[2] <- "CHANGE"

#6.两个数据框的连接,merge

test1 <- data.frame(name = c('jimmy','nicker','Damon','Sophie'), 
                    blood_type = c("A","B","O","AB"))
test1
代码语言:txt
复制
##     name blood_type
## 1  jimmy          A
## 2 nicker          B
## 3  Damon          O
## 4 Sophie         AB
代码语言:text
复制
test2 <- data.frame(name = c('Damon','jimmy','nicker','tony'),
                    group = c("group1","group1","group2","group2"),
                    vision = c(4.2,4.3,4.9,4.5))
test2
代码语言:txt
复制
##     name  group vision
## 1  Damon group1    4.2
## 2  jimmy group1    4.3
## 3 nicker group2    4.9
## 4   tony group2    4.5
代码语言:text
复制
test3 <- data.frame(NAME = c('Damon','jimmy','nicker','tony'),
                    weight = c(140,145,110,138))
test3
代码语言:txt
复制
##     NAME weight
## 1  Damon    140
## 2  jimmy    145
## 3 nicker    110
## 4   tony    138
代码语言:text
复制
merge(test1,test2,by="name")
代码语言:txt
复制
##     name blood_type  group vision
## 1  Damon          O group1    4.2
## 2  jimmy          A group1    4.3
## 3 nicker          B group2    4.9
代码语言:text
复制
merge(test1,test3,by.x = "name",by.y = "NAME")
代码语言:txt
复制
##     name blood_type weight
## 1  Damon          O    140
## 2  jimmy          A    145
## 3 nicker          B    110
代码语言:text
复制
#注释2merge左连接。使用merge()函数进行连接操作。左连接可以使用merge(x, y, by="common_column", all.x = TRUE)实现,其中x和y是要连接的两个数据集,by指定用于连接的列名,all.x设置为TRUE表示保留左侧数据集的所有行。右连接可以使用merge(x, y, by = "common_column",all.y=TRUE)实现,其中all.y设置为TRUE表示保留右侧数据集的所有行。
#注释3如何按照数据框的某一列,给整个数据框排序order,使用order()函数按照数据框的某一列对整个数据框进行排序。具体操作如下:假设有一个数据框为df,要按照其中的column_name列进行排序,可通过以下代码实现:df<-df[order(df$column_name), ]这会返回按照column_name列升序排列的数据框。如果需要降序排列,只需将排序表达式中的逗号后面的空格替换为decreasing = TRUE,即:df <- df[order(df$column_name, decreasing = TRUE), ]这会返回按照column_name列降序排列的数据框。
#注释4如何按照数据框的某一列,给整个数据框去重复,可以使用unique()函数按照数据框的某一列对整个数据框进行去重操作。具体操作如下:假设有一个数据框为df,要按照其中的column_name列进行去重,可通过以下代码实现:df_unique <- unique(df[, c("column_name")])这会返回一个只包含column_name列且无重复行的数据框df_unique。如果需要保留所有列并仅去除重复行,则可以将上述代码中的c("column_name")替换为NULL,即:df_unique <- unique(df)这会返回一个去除重复行后的完整数据框df_unique。
##### 矩阵matrix和列表
m <- matrix(1:9, nrow = 3)
colnames(m) <- c("a","b","c") #加列名
m
代码语言:txt
复制
##      a b c
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
代码语言:text
复制
m[2,]
代码语言:txt
复制
## a b c 
## 2 5 8
代码语言:text
复制
m[,1]
代码语言:txt
复制
## [1] 1 2 3
代码语言:text
复制
m[2,3]
代码语言:txt
复制
## c 
## 8
代码语言:text
复制
m[2:3,1:2]
代码语言:txt
复制
##      a b
## [1,] 2 5
## [2,] 3 6
代码语言:text
复制
m
代码语言:txt
复制
##      a b c
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
代码语言:text
复制
t(m)#矩阵转置,行列互换
代码语言:txt
复制
##   [,1] [,2] [,3]
## a    1    2    3
## b    4    5    6
## c    7    8    9
代码语言:text
复制
as.data.frame(m)#矩阵m要变成数据框,需要赋值,仅运行这句m数据类型还是矩阵
代码语言:txt
复制
##   a b c
## 1 1 4 7
## 2 2 5 8
## 3 3 6 9
代码语言:text
复制
pheatmap::pheatmap(m)#矩阵画热图,默认聚类
代码语言:text
复制
#列表,一般要提取,并用as转换
l <- list(m1 = matrix(1:9, nrow = 3),
          m2 = matrix(2:9, nrow = 2))
l
代码语言:txt
复制
## $m1
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
## 
## $m2
##      [,1] [,2] [,3] [,4]
## [1,]    2    4    6    8
## [2,]    3    5    7    9
代码语言:text
复制
l[2]#数据类型是列表,而有些函数如热图只接受数据类型矩阵
代码语言:txt
复制
## $m2
##      [,1] [,2] [,3] [,4]
## [1,]    2    4    6    8
## [2,]    3    5    7    9
代码语言:text
复制
l[[2]]#列表取子集,数据类型是矩阵,两个[[]]/$
代码语言:txt
复制
##      [,1] [,2] [,3] [,4]
## [1,]    2    4    6    8
## [2,]    3    5    7    9
代码语言:text
复制
l$m1
代码语言:txt
复制
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
代码语言:text
复制
# 补充:加元素的名字,按名字取子集

scores = c(100,59,73,95,45)
names(scores) = c("jimmy","nicker","Damon","Sophie","tony")
scores#加名字是属性,不属于表格内容
代码语言:txt
复制
##  jimmy nicker  Damon Sophie   tony 
##    100     59     73     95     45
代码语言:text
复制
scores["jimmy"]
代码语言:txt
复制
## jimmy 
##   100
代码语言:text
复制
scores[c("jimmy","nicker")]
代码语言:txt
复制
##  jimmy nicker 
##    100     59
代码语言:text
复制
names(scores)[scores>60]
代码语言:txt
复制
## [1] "jimmy"  "Damon"  "Sophie"
代码语言:text
复制
# 删除 ,ctrl+l,清空控制台
rm(l)#删除一个
rm(df1,df2)#删除多个
rm(list = ls()) #删除全部,ls环境中所有变量,列出一个包里所有函数或数据
jimmy <- function(a,b,m = 2){
  (a+b)^m
}#写函数的函数
jimmy(a = 1,b = 2)
代码语言:txt
复制
## [1] 9
代码语言:text
复制
jimmy(1,2)
代码语言:txt
复制
## [1] 9
代码语言:text
复制
jimmy(3,6)
代码语言:txt
复制
## [1] 81
代码语言:text
复制
jimmy(3,6,-2)
代码语言:txt
复制
## [1] 0.01234568
代码语言:text
复制
#复习:绘图函数plot()
par(mfrow = c(2,2)) #把画板分成四块,两行两列
#如果报错,把右下角画板拉大一点即可
x = c(2,5,6,2,9);plot(x)
x = seq(2,80,4);plot(x)
x = rnorm(10);plot(x)
x = iris$Sepal.Length;plot(x)
代码语言:text
复制
#思考:plot画iris的前四列?
plot(iris[,1],col = iris[,5])
plot(iris[,2],col = iris[,5])
plot(iris[,3],col = iris[,5])
plot(iris[,4],col = iris[,5])
代码语言:text
复制
#当一个代码需要复制粘贴三次,就应该写成函数或使用循环

jimmy <- function(i){
  plot(iris[,i],col=iris[,5])
}

jimmy(1)
jimmy(2)
jimmy(3)
jimmy(4)
代码语言:text
复制
# R包安装,R包:多个函数的打包存放,包含函数,数据,帮助文件,描述文件,library里面是R包,没有就安装(3种),安装成功的标识是library没有error

#options("repos"=c(CRAN="http://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
#options(BioC_mirror="http://mirrors.ustc.edu.cn/bioc/")

#install.packages()

#BiocManager::install()

#devtools::install_github() #括号里写作者用户名加包名

# 清华镜像
# http://mirrors.tuna.tsinghua.edu.cn/CRAN/
# http://mirrors.tuna.tsinghua.edu.cn/bioconductor/

# 中科大镜像
# http://mirrors.ustc.edu.cn/CRAN/
# http://mirrors.ustc.edu.cn/bioc/

#library(tidyr)
#require(tidyr)

# 分情况讨论

if(!require(stringr))install.packages("stringr")

# 获取帮助
#?seq
#library(stringr)
#browseVignettes("stringr")
#ls("package:stringr")

#文件读写部分
#csv, 以逗号为分隔符的纯文本文件,竖排对应次序的逗号相当于连线。文件打开方式1默认EXCEL,2记事本,3subline(适用大文件)4R语言读取,一般赋值读取,文件读取了,就会生成数据框,对数据框进行的修改不会同步到表格文件
#TSV(\t 制表符tab分隔))
#但是纯文本文件的这些后缀没有意义,只是约定俗称,如果一个文件后缀是csv,但是制表符分隔,也没有问题
#1.读取ex1.txt(含列名)
ex1 <- read.table("ex1.txt")#此时第一行是列名,txt默认header=F
ex1 <- read.table("ex1.txt",header = T)#此时列名正确显示
#class(ex1) 返回data.frame,class("ex1.txt")返回字符,因为class函数并不接受文件名称作为实际参数,所有""都会返回字符,不管里面是什么内容
#2.读取ex2.csv
ex2 <- read.csv("ex2.csv")
ex2 <- read.csv("ex2.csv",row.names = 1,check.names = F)#csv默认header=T,因此需要列名。有行名是需要用row.names=1归化
#列名中有特殊字符如-会被R自动转换,因此需要check.names=F

#注意:数据框不允许重复的行名
rod = read.csv("rod.csv",row.names = 1)#尝试将第一列设置行名但失败,因为有重复的字符(a,a,b,b)
代码语言:txt
复制
## Error in read.table(file = file, header = header, sep = sep, quote = quote, : duplicate 'row.names' are not allowed
代码语言:text
复制
rod = read.csv("rod.csv")

#3.读取soft.txt,不规则数据框,第4列825行以下空,第五列825以下有数据
soft <- read.table("soft.txt") #第五列825以上无数值,此时报错
代码语言:txt
复制
## Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, : line 2 did not have 5 elements
代码语言:text
复制
soft <- read.table("soft.txt",header = T,fill = T) #其实不对
soft2 <- read.table("soft.txt",header = T,sep = "\t")#这才是正确语句
#read.table语句中,默认sep="",一切空白如连续两个制表符会被当成一个分隔符,因此自动填充会串行,#sep参数是用来指定分隔符的,默认值为空格。它可以接受任何单个字符或字符串作为参数,用于将文本数据内容分割成列。常见的分隔符包括逗号(,),制表符(\t),分号(;)等。例如,当读取以逗号分隔的CSV文件时,应该将sep参数设置为逗号(,)。当sep = "\t"时,read.table将使用制表符作为分隔符来读取文本文件中的数据。
#4.soft 的行数列数是多少?列名是什么
dim(soft)
代码语言:txt
复制
## [1] 1000    5
代码语言:text
复制
colnames(soft)
代码语言:txt
复制
## [1] "ID"       "SEQUENCE" "GeneName" "GB_ACC"  
## [5] "SPOT_ID"
代码语言:text
复制
#5.将soft导出为csv
write.csv(soft,file = "soft.csv")
#6.将soft保存为Rdata并加载。Rdata是R特有的数据储存形式,不是表格文件;保存的是变量。
save(soft,file = "soft.Rdata")
rm(list = ls())
load(file = "soft.Rdata")
#7实战项目组织方式一,不同文件类型放在不同文件夹存储
surv=read.table("import/xxx.txt") #import文件夹里读取数据
代码语言:txt
复制
## Error in file(file, "rt"): cannot open the connection
代码语言:text
复制
save(x,file='Rdata/xxx.Rdata')  #储存到Rdata文件夹里
代码语言:txt
复制
## Error in save(x, file = "Rdata/xxx.Rdata"): object 'x' not found
代码语言:text
复制
#实战项目组织方式二,在文件夹二中调用文件夹一中的数据
load("../1_data/xxx.Rdata")  #../指上一级文件夹
代码语言:txt
复制
## Error in readChar(con, 5L, useBytes = TRUE): cannot open the connection
代码语言:text
复制
#用于读取导出文件的R包-rio: import(),import_list(),export()
#6.加载y.Rdata(已保存在工作目录),求gene1列的平均值

load(file='y.Rdata')##y是矩阵,因此虽然显示数字,但因为最后一列是字符,所以所有元素都变成了字符型向量,所以mean(y[,1])会报错
y[,1]#y是矩阵,不能用y$gene1,可以y[,1],也可以y[,"gene1"]
代码语言:txt
复制
## GSM1 GSM2 GSM3 GSM4 GSM5 GSM6 
## "40" "20" "51" "46" "38" "49"
代码语言:text
复制
mean(as.numeric(y[,1])) #y为字符矩阵,因此需要转换#y[,1] = as.numeric(y[,1]);y[,1],此时赋值不成功,因为y[,1]还是代表矩阵第一列,而矩阵只会允许一种数据类型,要改除非整个矩阵一起改
代码语言:txt
复制
## [1] 40.66667
代码语言:text
复制
#如果要把矩阵中的字符都转换成数字,需改成数据框

class(y)  #字符矩阵,最后一列为字符,其余为数字字符
代码语言:txt
复制
## [1] "matrix" "array"
代码语言:text
复制
z <- as.data.frame(y);z
代码语言:txt
复制
##      gene1 gene2 gene3 gene4 gene5 gene6
## GSM1    40    15    22   600    25   123
## GSM2    20    45    77   544    33   124
## GSM3    51    12    26   350    30    55
## GSM4    46    11    20   390    45   334
## GSM5    38    12    24   260    20   543
## GSM6    49    10    25   220    33   239
##      grouplist
## GSM1   control
## GSM2   control
## GSM3   control
## GSM4     treat
## GSM5     treat
## GSM6     treat
代码语言:text
复制
class(z)  #数据框
代码语言:txt
复制
## [1] "data.frame"
代码语言:text
复制
ncol(z)
代码语言:txt
复制
## [1] 7
代码语言:text
复制
z[,1:(ncol(z)-1)] <- as.numeric(y[,1:(ncol(z)-1)]) #或
z[,1:(ncol(z)-1)] <- as.numeric(unlist(z[,1:(ncol(z)-1)]))
#矩阵可以直接转为数字向量,数据框需要unlist()
jimmy <- function(a,b,m = 2){
  (a+b)^m
}
jimmy(a = 1,b = 2)
代码语言:txt
复制
## [1] 9
代码语言:text
复制
jimmy(1,2)
代码语言:txt
复制
## [1] 9
代码语言:text
复制
jimmy(3,6)
代码语言:txt
复制
## [1] 81
代码语言:text
复制
jimmy(3,6,-2)
代码语言:txt
复制
## [1] 0.01234568
代码语言:text
复制
#复习:绘图函数plot()
par(mfrow = c(2,2)) #把画板分成四块,两行两列
#如果报错,把右下角画板拉大一点即可
x = c(2,5,6,2,9);plot(x)
x = seq(2,80,4);plot(x)
x = rnorm(10);plot(x)
x = iris$Sepal.Length;plot(x)
代码语言:text
复制
#思考:plot画iris的前四列?
plot(iris[,1],col = iris[,5])
plot(iris[,2],col = iris[,5])
plot(iris[,3],col = iris[,5])
plot(iris[,4],col = iris[,5])
代码语言:text
复制
#当一个代码需要复制粘贴三次,就应该写成函数或使用循环

引用生信技能树,闻季起舞 This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

代码语言:text
复制
summary(cars)
代码语言:txt
复制
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

Including Plots

You can also embed plots, for example:

1.代码错误标志与多行代码
1.代码错误标志与多行代码
2循环补齐条件
2循环补齐条件
3数据框来源
3数据框来源
4循环补齐注意非整倍数,或数据类型要求.
4循环补齐注意非整倍数,或数据类型要求.
5记忆卡片
5记忆卡片
6.函数参数自定义修改
6.函数参数自定义修改
7.数据结构
7.数据结构
8R语言符号
8R语言符号
9文件名称识别条件
9文件名称识别条件
10文件读取和导出
10文件读取和导出
11文件读取和导出错误示例
11文件读取和导出错误示例
12文件本质由生成的函数决定请在此添加图片描述
12文件本质由生成的函数决定请在此添加图片描述

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • R Markdown
  • Including Plots
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档