R语言学习笔记(一)

1. getwd()

  • 描述

    • 打印当前的工作目录(working directory),是R用来读取文件和保存结果的默认目录;
    • 我们可以使用函数getwd()来查看当前的工作目录。记得使用引号闭合这些目录名和文件名。
  • 语法

getwd("路径")

2. setwd()

  • 描述

    • 设定当前的工作目录。
  • 语法

setwd("路径")
  • 举栗

> getwd()
> [1] "C:/Users/Jay Chou/Documents"
> setwd("G:/Script/R")
> getwd()
> [1] "G:/Script/R"

3. source()

  • 描述

  • 函数 source("filename") 可在当前会话中执行一个脚本。如果文件名中不包含路径,R将假设此脚本在当前工作目录中。

  • 语法

source("/路径/myscript.R")

4. 向量

  • 描述

    • 向量(vector)是用于存储数值型、字符型或逻辑型数据的一维数组。执行组合功能的函数c()可用来创建向量。各类向量如下例所示:
a <- c(1, 2,3)
b <- c("one","two","three")
C <- c(TRUE, TRUE, FALSE)

​ 这里,a 是数值型向量, b 是字符型向量,而 c 是逻辑型向量。

  • 单个向量中的数据必须拥有相同的类型或模式(数值型、字符型或逻辑型)。同一向量中无法混杂不同模式的数据。

  • 标量是只含一个元素的向量,例如 f <- 3 、 g <- "US" 和 h <- TRUE 。它们用于保存常量。

  • 通过在方括号中给定元素所处位置的数值,我们可以访问向量中的元素。

> a <- c(1:10,2)
> a[c(1,3)]
[1] 1 5
> a[c(1:3)]
[1] 1 3 5

5. list.files()

  • 描述

    • list.files()`函数遍历目标路径下所有文件,并将这些文件名组成一个字符向量。
  • 语法

list.files(path = ".", pattern = NULL, all.files = FALSE,
           full.names = FALSE, recursive = FALSE,
           ignore.case = FALSE, include.dirs = FALSE, no.. = FALSE)
  • 参数

    • path

      文件夹路径

    • pattern

      匹配文件名,选择自己所需的文件(可选项,默认是全部文件名,包括子文件夹,但是不包括子文件夹的文件),如pattern = "*.XPT",表示要输出以.XPT结尾的文件名,如果没有​符号,则输出包含.XPT的文件名

    • all.files

      是否返回所有文件,包括隐藏文件,但不包括子文件夹的文件,默认是否

    • full.names

      是否返回路径+文件名,默认是否,如果是否,则返回文件名

    • recursive

      是否将子文件夹的文件也列出来

    • ignore.case

      匹配的文件名是否忽略大小写,默认否,即不忽略大小写

6. 正则表达式

  • 参见R语言之正则表达式,内容挺多的,以后遇到了再写

  • ["字符串"]:表示匹配字符串的所有单个字符

7. strsplit()

  • 描述

    • 分割字符向量的元素,根据匹配项将字符向量的元素拆分为子字符串,保存为一个list中。
  • 语法

strsplit(x, split, fixed = FALSE, perl = FALSE, useBytes = FALSE)
  • 参数

    • x

      字符向量,将分割每个元素。其他输入(包括一个因数)将产生错误。

    • split

      包含用于split的正则表达式(除非fixed = TRUE)的字符向量(或可以强制转换为此类的对象)。如果出现空匹配,特别是如果split长度为0,则将 其x拆分为单个字符。如果split长度大于1,则会沿循环

    • fixed

      逻辑参数。如果完全TRUE匹配split,则使用正则表达式。优先于perl

    • perl

      逻辑参数。是否应该使用与Perl兼容的正则表达式

    • useBytes

      逻辑参数。如果TRUE匹配是逐字节进行的,而不是逐字符进行的,则不会转换带有标记编码的输入。如果发现任何标记为的输入"bytes" (请参见参考Encoding),则将强制执行此操作(带有警告)。

  • 举栗

#将"1469530N_1.fq.gz"中的_和.去掉
> a = c("1469530N_1.fq.gz")
> b = strsplit(a, "[._]")
> b
[[1]]
[1] "1469530N" "1" "fq" "gz"
#将"1469530N_1.fq.gz"中的_和_后面的四位字符去掉
#.表示模糊匹配,可以向前模糊匹配(".._"),也可以向后模糊匹配("_..")
> a = c("1469530N_1.fq.gz")
> b = strsplit(a, "_....")
> b
[[1]]
[1] "1469530N" ".gz" 

8. sapply()

  • 描述

    • 用于提取列表中指定的元素
  • 语法

sapply(x, FUN, options)
  • 参数

    • x

      数据框(或矩阵、list?)

    • FUN

    • 为一个任意的函数。如果指定了 options ,它们将被传递给 FUN ;也可以为自定义函数。

9. unique()

  • 描述

    • 筛去重复元素

10. function()

  • 描述

  • 定义函数

  • 语法

function(arglist) expr
  • 参数

    • arglist

      参数列表

    • expr

      表达式

  • 举栗

#确认当前路径
> getwd()
[1] "G:/Script/R"
#列出当前路径下所有文件
[1] "bismarkWGBS.wdl"         "Build_Jobs.R"            "Build_Jobs_annotation.R" "buildTabix.R"           
[5] "Oncotator_FG.R"          "workflow.R"              "workflow_annotation.R" 
#列出当前路径下所有R文件
> a = list.files(getwd(), ".R")
> a
[1] "Build_Jobs.R"            "Build_Jobs_annotation.R" "buildTabix.R"            "Oncotator_FG.R"         
[5] "workflow.R"              "workflow_annotation.R"  
#以.和_为分隔符分割文件名
> b = strsplit(a, "[._]")
> b
[[1]]
[1] "Build" "Jobs"  "R"    
[[2]]
[1] "Build"      "Jobs"       "annotation" "R"         
[[3]]
[1] "buildTabix" "R"         
[[4]]
[1] "Oncotator" "FG"        "R"        
[[5]]
[1] "workflow" "R"       
[[6]]
[1] "workflow"   "annotation" "R"
#提取每行的第一个元素
> c = sapply(b, function(z) z[1])
> c
[1] "bismarkWGBS" "Build"       "Build"       "buildTabix"  "Oncotator"   "workflow"    "workflow"              
#去除重复元素
> unique(c)
[1] "bismarkWGBS" "Build"       "buildTabix"  "Oncotator"   "workflow"   

11. setdiff()

setdiff(x, y)

​ 在向量x中取出其与向量y不同的元素

setdiff(x=1:4, y=2:3)
[1] 1 4

12. paste()&paste0()

  • 描述

- 两个函数均用于拼接字符,不同之处在于paste()默认以空格为分隔符,paste0()没有分隔符
  • 语法

paste(..., seq = " ", collapse = NULL)
paste0(..., collapse = NULL)
  • 参数

    • ...

      指待拼接的字符

    • seq

      表示拼接字符的分隔符,默认为空格,paste()若指定seq = "",则其功能与paste0()相同

    • collapse

      表示如果不指定值,那么函数paste的返回值是自变量之间通过sep指定的分隔符连接后得到的一个字符型向量;如果为其指定了特定的值,那么自变量连接后的字符型向量会再被连接成一个字符串,之间通过collapse的值分隔。

  • 举栗

> a = paste("hellow","world","!")
> b = paste0("hellow","world","!")
> a
[1] "hellow world !"
> b
[1] "hellowworld!"
#其实我没理解collapse参数的作用

13.system()

  • 描述

    • 函数system()的作用是,调用由参数command指定的操作系统命令。

  • 语法

system(command, ...)

14. Sys.sleep()

  • 描述

    • 系统睡眠

15. names()

  • 描述

    • 获取或设置对象名称。
  • 语法

    names(x)
    names(x) <- value
    
  • 参数

    • x

      一个R对象

    • value

      一个与x相同长度的字符向量或者NULL

  • 案例

#name()函数主要优点是,它使您可以方便地读取子集。
> islands[c("South America", "Southampton")]
South America   Southampton 
         6795            16 
#您可以使用正则表达式提取名称以"A"开头的所有岛
> islands[grepl("^A", names(islands))]
      Africa   Antarctica         Asia    Australia Axel Heiberg 
       11506         5500        16988         2968           16 
#您可以覆盖所有名称
> (x <- list(a = 1, b = letters[1:5], c = list(d = 1:3)))
> names(l) <- LETTERS[1:3]
> x
$A
[1] 1
$B
[1] "a" "b" "c" "d" "e"
$C
$C$d
[1] 1 2 3

16. 泛型函数

​ 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法
时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,> 类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用> 时传入具体的类型。——来自百度
自我理解:泛型函数就是,你定义函数时候,是万能类型。在调用的时候,只要你把具体的> 类型传进去就好。好处呢,就是代码的复用,减少代码量。
在面向对象的语言中都是有泛型的这个概念和实现的。比如说:JAVA、C#、C++、TypeScript等> 等。但是我们在看书或者学习的时候呢,一般只是看到了这样的概念,或者说例子很简单,就是一> 个Int 和 string 参数的泛型使用。
​ 其实泛型是用的很广泛的,特别是在写底层框架的时候。当大家去看源码的时候,会看到很多泛> 型。最近的工作中也用到了泛型,算是写底层吧,因为给别人调用。

原文链接

17. rjson&rjson包

翻译于json.org

  • Introducing JSON

    • json(javascript对象表示法)是一种轻量级数据交换格式。人类读写起来很容易。机器很容易解析和生成。它基于1999年12月第3版的javascript编程语言标准ecma-262的一个子集。JSON是一种完全独立于语言的文本格式,但是使用了C语言家族的程序员熟悉的约定,包括C、C++、C**、Java、JavaScript、Perl、Python和许多其他。这些属性使json成为理想的数据交换语言。

    • json基于两种结构:

      • 名称/值对的集合。在各种语言中,这可以实现为对象、记录、结构、字典、哈希表、键列表或关联数组。
      • 值的有序列表。在大多数语言中,这是以数组、向量、列表或序列的形式实现的。

      这些是通用的数据结构。几乎所有现代编程语言都以某种形式支持它们。与编程语言可互换的数据格式也基于这些结构是有意义的。

    • 在json中,它们采用以下形式:
      对象是一组无序的名称/值对。对象以{左大括号开始,以}右大括号结束。每个名称后跟:冒号,名称/值对用逗号分隔。

    • JSON文件数据存储在人类可读格式的文本。 JSON代表JavaScript对象符号。 R能够使用rjson包读取JSON文件。

  • 安装rjson软件包

install.packages("rjson")

18. library()

  • 描述

    • 加载/附加和列出软件包
    • 加载后,可在包内定义新的函数
  • 用法

library(package, ...)
  • 参数

    • package

      包的名称,以名称或文字字符串或字符串的形式给出

    • ...

      其他参数

  • 案例

#在rjson包内定义新的函数writeJSON
library("rjson")
writeJSON <- function(xList, mainTag, fileOut){
  ...
}

19. file()函数

  • 描述

    • 创建文件
  • 用法

file(file_name, access_mode)
  • 参数

    • file_name

      文件名

    • access_mode

      文件访问模式

20. cat()函数

  • 描述

    • 连接并打印
    • 输出对象,并连接表示形式。 cat 执行的转换比少得多print
    • cat对于在用户定义的函数中产生输出很有用。它将参数转换为字符向量,将其连接为单个字符向量,将给定的sep = 字符串附加到每个元素,然后输出它们。
    • 除非得到明确的要求,否则不输出换行符 “\ n” 或通过填充生成(如果参数fillTRUE或数字)。
  • 语法

cat(… , file = "", sep = " ", fill = FALSE, labels = NULL,append = FALSE)
  • 参数

    • ...

      R对象

    • file

      一个connection,或者一个命名文件的字符串。如果""(默认)cat打印到标准输出连接,则控制台输出,除非通过重定向 sink。如果为"|cmd",则cmd通过打开管道连接将输出通过管道传递给给出的命令。

    • sep

      在每个元素后附加的字符串的字符向量,默认空格。

    • fill

      逻辑值或正数字,用于控制如何将输出分成连续的行。如果是FALSE(默认值),则仅由显式创建的换行符“\ n”被打印。否则,该输出被分成与打印宽度等于该线路的选项 width,如果fillTRUE,或的值 fill,如果这是数字。非正值fill将被警告,并被忽略。

    • lables

      行的标签的字符向量。如果被忽略fillFALSE

    • append

      仅当参数file是文件名(而不是连接或"|cmd")时使用。如果TRUE输出将附加在 file; 否则,它将覆盖的内容 file

  • 案例

#打印输入的每个元素,并用空格分隔。为了进行比较,请看一下在paste()相同输入下的行为。
> cat(LETTERS)
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
> paste(LETTERS)
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
[20] "T" "U" "V" "W" "X" "Y" "Z"

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容

  • 写在前面:写的比较简单,把基本知识点捋了一遍,主要是用来给自己理清思路和复习用的,适合有一定编程基础的初学者来看。...
    _ikiru_阅读 1,621评论 0 0
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 4,869评论 0 9
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,314评论 0 5
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,618评论 0 10
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,645评论 2 9