`
zzjjzzgggg
  • 浏览: 124352 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

R 语言摘记(R-intro)

    博客分类:
  • R
R 
阅读更多

寻求帮助,使用 help(solve),?solve 和 help(“solve”)是一样的,如果需要搜索可以用 help.search(solve) 或者 ??solve。另外使用 help.start() 可以打开网页版的帮助,这个功能倒是和 Matlab 的 doc 有几分相似。

 

使用 source() 和 sink() 命令可以将 R 的输入输出重新定向,比如从一个文件中读入命令就是 source( “my-file.R”),而将输出导入到文件则是 sink( “output.result” )。

 

对于一个 workspace 里面的数据,可以用 objects() 或者 ls() 列出,rm(x, y, z) 删掉某些变量,值得注意的是这里直接写变量名,都没有引号,这是和 R 语言的规范有关系的(与 lisp 挺像的)。结束一个 session 的时候可以将 workspace 的内容存储在工作目录下,作为 .RData 文件,下次在该目录使用 R 打开新的 R 对话时会自动的读入。存储 workspace 可以用 save.image(),或者更加细致的 save() 命令。

 

R 的赋值使用 ->、<- 或者 assign( variable, content ) 形式。主要的数据类形式 vector、objects、factor、array、matrix、list 和 data frame。vector 这个和一般的 Matlab 数组类似,但是和 Matlab 的运算不同的是,它不需要参与运算的两者长度一样,不同长度的元素会按照最长的那一个重复。

 

常用生成 vector 的函数有 seq() 类似 matlab 的 linspace 或者 1:2:10 这种类型的等差数列,rep() 是类似 repmat 的作用,但是可以将整体重复或者将每个元素重复。和 Matlab 类似,R 也拥有 logical vector(支持 !、& 等逻辑操作),vector 里面的 NA 表示 missing value。判断 NA 使用 is.na(),这个与 Matlab 的 is 系列函数类似。注意 is.na(x) 与 x == NA 的结果是不同的。另外有一些计算会产生 NaN,这和 NA 有一定的不同,但是 is.na() 对两者不加区分,而 is.nan() 可以区分两者。

 

R 的字符串 vector 和 matlab 类似,都是用现成的结构(R 使用 vector)存放的,R 支持单引号或者双引号,也支持 C 语言中的转意字符,如 \n、\t 等。

 

如果需要取一个 vector 的一部分出来,与 Matlab 类似可以用 logical vector,或者一个整数 vector,但是和 matlab 不同的是,索引使用 [],而不是 (),另外允许对返回值使用索引,比如 (1:10)[seq(1, 10, by=2)] 是允许的。另外如果 index 出现负数,表示除掉这些绝对值后的 index 剩下的 index。与 Matlab 类似,索引的 vector 可以作为左值。不同的是 R 的 vector 有 names 属性,这意味着每个元素还可以通过字符串来进行索引(需要用 names(myvector)<-c(…) 赋值)。

 

R 里面的原子结构(atomic structure)是 logical、numeric、complex、character 和 raw,其他的 objects 都是这些 atom 的组合,我们也把原子的种类称为 mode,比如 vector 是相同的 atom 组成的;而 list 就是为了形成各种结构的嵌套结构,所以每个元素可以是不同的 mode。我们可以用 mode(obj) 获得一个对象的 mode,另外一个属性是 length()。一般来说,我们可以通过 attributes() 获得一个对象的属性。结构的互相转换,常使用 as.*() 函数,如 as.character()、as.integer()。

 

值得注意的是,访问某个对象的属性和修改该属性都使用同一个函数,只是后者加上赋值,如 length(x) <- 3 可以将 x 的长度变成 3,即自动的抛弃其他的元素,一般的使用 attr( objective, “property”) 获得某个对象的属性。每个对象有自己的 class,这可以用 class() 获得,使用 unclass() 可以暂时消除起 class 信息。

 

所谓的 factor 就是所谓的 categorical variable,这分为 ordered 以及 unordered,如创建一个 string vector,通过 factor 构造出一个 unordered factor,我们可以用 levels 获得其标签,如果我们用 class 查看会发现这是 factor,但是用 mode 看却是 numeric。一个 factor 和一个 vector 的组合常被称为 ragged array,因为每个子类的长度不一定相同。我们常用 taaply( vector, factor, fun) 来对每个子类的数据进行计算。ordered factor 使用 ordered() 创建,两者大致看来只是后者会依照 factor 排序,但是在 regression 里面两者是区别对待的。

 

matrix 和 array 都是含有 dim 属性的 vector,因此建立一个 vector,然后对其 dim 属性赋值就变成 matrix 或者 array,matrix 是两维的,更高维的就是 array,如 x<-runif(24),dim(x) <- c(3, 8) 这产生的是 3×8 的 matrix,我们可以通过 class 看见,其 mode 仍然是 numeric。对 array 的索引和 Matlab 一样,可以用 [ , ] 的形式,只是用空参数表示全部的(Matlab 是 :),另外 R 支持用 array 来作索引,如 3×4 的 matrix 可以用 nx2 的 matrix 取其中 n 个元素,每行是一个索引位置。可见 R 里面的 matrix 或者 array 的数据储存并没有改变,只是通过 dim 属性给它添加了额外的索引方式。可以用 array() 和 matrix() 更方便的创建我们需要的矩阵、数组。如我们需要产生一个 N 个样本 c 类的 assignment matrix,A <- matrix(0, N, c); idx <- cbind( 1:N, labels); A[ idx ] <- 1 ; 其中 cbind() 将两个 matrix 依照列拼接,类似的还有 rbind(这分别相当于 Matlab 里面的 [ ; ] 与 [ , ])。当 vector 和 marix/array 混合在一起进行计算的时候,短的 vector 补长,必须拥有相同的 dim。将 matrix/array 转换成为 vector 只需要 as.vector() 或者直接用 c() 即可。

 

常用的矩阵操作有元素对元素的加法、减法和乘法,直接使用 + – * 即可,另外有矩阵乘法用 %*%(vector 作矩阵乘法的时候会产生较小的矩阵,比如两个 vector 相乘,产生的是标量而不是一个矩阵),外积(其实是 Kronecker 乘积)%o% 或者 outer()。不过 outer() 是更广义的函数,除了可以做 %o% 运算,还可以将任意函数作用在类似的结构上。矩阵的转置使用 aperm,这个操作实际上是把 array 的维数互换,因此 aperm( X, c(2 1)) 等价于转置了,更简洁的是使用 t(X)。crossprod(X, y) 等价于 X’y,而diag() 和 Matlab 中函数类似。求解线性系统可以用 solve(A, b),如果写 solve(A) 返回的是 A 的逆。使用 eigen() 可以求出特征值,这返回的的一个是 $value,一个是 $vectors,这种结构将在后面介绍。奇异值使用 svd(),它返回 $d $u $v 三个部分。lsfit() 可以计算最小二乘拟合。qr() 计算对应的 QR 分解。

 

为了统计一些频率,比如 contingency table,都会使用 table() 函数,比如对 factor 的统计,如果是实值的可以用 cut() 函数将其值离散化为 ordered factor,如果有多个 因素,则对应的 contingency table 也是用 table( factor1, factor2 ) 获得的。

 

前面我们看见了 $ 这种写法,这就是 list,这一般使用 list() 创建,list 的元素可以有用来索引的 key,这可以用 listvar$key 获得其内容,也可以使用 listvar[[ "key" ]]获得,通过 [[i]] 这样可以遍历所有 key,注意 [i] 将和 Matlab 对 cell array 使用 (i) 类似,获得的不是第 i 个位置的内容,而是对应位置上的 list。对 list 使用 attributes() 将会返回 names,这是这个 list 所有的 key 组成的 key,如果没有 key,对应的是一个空字符串。这也是 R 默认返回多个返回值的方法。

 

所谓的 data.frame 也是一种 list,但是要求每个子 list 里面都是长度一样的 vector,其实 data.frame 是处理数据最佳的方式,相当于每一列都是一个特征的数据矩阵。通常我们可以用 data.frame() 函数产生,这其实和 list() 函数完全一样。为了处理某个 data.frame 方便,可以用 attach()/detach() 进入到某个 data.frame 的 scope 里,这时就可以免去前面 data$ 的修饰符了,对一般的 list 也可以使用类似的方式。我们要对 R 寻找变量的方式熟悉的话就知道,使用 search() 返回的是搜索变量和函数的 scope,一般 R 的基本函数在 package:base 里面,全局变量在 .GlobalEnv 里面,attach() 的 list 也会添加到这个 vector 里面。最常见读入外部数据的函数是 read.table(),这也是创建 data.frame 的最方便的方式,另外还有一个 scan()。R 自己也带了很多数据供做实验,可以用 data( dataset ) 读入,还可以用某个特定的 package 读入数据。对这种数据一般都可以在一个 spreadsheet 里面编辑,这只需要 edit() 那个 data.frame 就可以了。

分享到:
评论

相关推荐

    Codelife 不止代码 - 自阅读加注标签-技术规划的借鉴 有摘记和感想.md

    Codelife 不止代码 - 自阅读加注标签-技术规划的借鉴 有摘记和感想.md,提供了原文的详细目录大纲,更重要的是给出了自学摘记,记录下诸多感想。 人的学习进步体现在对抽象问题的概括和具体问题的有针对性的见解,...

    自主研修摘记.doc

    【自主研修摘记】的主题聚焦于如何激发学生对计算的兴趣,这在数学教育中尤为重要。以下是摘记中提到的五个关键策略: 1. **创设情境,激发兴趣**:教师应当利用教材内容和学生的心理特点,设计引人入胜的课堂开头...

    《Effective C++》摘记

    ### 《Effective C++》摘记知识点解析 #### 标题与描述概述 - **标题**:“《Effective C++》摘记”:该标题表明了文章的主要内容是关于《Effective C++》一书中的精华总结。 - **描述**:“《Effective C++》中的...

    Fluent重要说明摘记.pdf

    Fluent软件应用过程中的一些比较重要的说明摘记

    信息系统项目管理师摘记

    软考信息系统管理师考试摘记。 项 目 管 理 知 识 体 系(九大管理) INPUT TOOL OUTPUT 4.1 制定项目章程 1、合同(如果适用) 1、项目选择方法 1、项目章程 2、项目工作说明书 2、项目管理方法系   3、事业环境...

    ejb3的一些摘记

    6. **查询语言(JPQL, JPA Query Language)**:EJB 3提供了与SQL类似但面向对象的查询语言JPQL,用于检索和操作实体bean。 7. **事务管理**:EJB 3提供了一种声明式事务管理方式,通过`@TransactionAttribute`注解...

    《胡希恕伤寒论坛讲座》摘记.doc

    《胡希恕伤寒论坛讲座》摘记.doc

    第5课网络摘记教学设计.doc

    【网络摘记教学设计】 本课程的核心是教授学生如何有效地在网络中查找、搜集信息,并将这些信息整理成有条理的文档,特别是使用Microsoft Word进行简单的排版。教学目标包括三个方面:一是掌握资料查找和搜集的基本...

    Hibrenate 学习摘记

    ### Hibrenate 学习摘记 #### Hibernate 概述与基本配置 Hibernate 是一个开源的对象关系映射(ORM)框架,它简化了 Java 应用程序与数据库之间的交互过程。通过将对象模型与数据库模型进行映射,开发人员可以更...

    构建高性能web站点摘记.pdf

    动态脚本加速主要针对PHP、Python等解释性语言,通过缓存中间代码(opcode)减少解释执行的开销,提高执行速度。 浏览器缓存能显著减少HTTP请求,通过Last-Modified/If-Modified-Since、ETag/If-None-Match和...

    初中语文语文论文如何培养学生积累语言的兴趣

    这篇语文论文探讨的是如何在初中阶段培养学生的语言积累兴趣,以提升他们的语文素养。语言积累是小学阅读教学的重要环节,而培养学生的兴趣是促进这一过程的关键。以下是文章中提出的一些策略和方法: 首先,指导...

    胡希恕伤寒论坛的讲座摘记.doc

    "胡希恕伤寒论坛讲座摘记" 本文摘记了胡希恕伤寒论坛的讲座要点,总共十八点,涵盖了中医基础理论、方剂学、诊断学等多方面的知识点。 一、温病不能发汗,不能吃泻药,更不能用火攻,只能用白虎汤。 本点讲述了...

    unix,你在学UNIX?这个高手的摘记,非常不错,快下吧。

    - **脚本语言支持**:UNIX支持多种脚本语言,如Shell脚本等,这些脚本语言使得自动化任务变得简单易行。 #### 三、UNIX系统的历史与标准 - **历史沿革**:UNIX系统起源于1960年代末期,最初由肯·汤普森(Ken ...

    2021-2022收藏资料自贡市绿盛实验学校课堂教学改革摘记山东行第11期总第27期(自贡课模讲座八之37).doc

    【教育精品资料】这篇文档是关于2021-2022年自贡市绿盛实验学校在课堂教学改革过程中的学习与探索记录,主要涵盖了四川自贡地区多个区县的教改模式,并且详细描述了学校教师赴山东名校参观学习的考察报告。...

    计算机操作系统(第四版)汤晓丹著复习摘记.pdf

    操作系统是计算机系统的核心软件,它负责管理和控制计算机系统的硬件与软件资源,提供用户与计算机交互的平台。了解操作系统的发展过程、基本特征、进程管理、作业调度等概念是计算机科学与技术专业的基础课程内容。...

    小学各年级阅读量要求.doc

    - 提倡主动探究性学习,将阅读与实践结合,运用所学语言文字进行摘记和写作。 - 培养独立思考能力,形成良好的语感,使阅读成为情感体验和个人成长的过程。 - 学习使用语文工具书,阅读古诗和简短的文言文,以...

    EndNote X4 Bld 4845 rar 参考文献管理工具 part1

    在一个文献下用数字标示文字摘记 允许匿名工作选项 缩进选项 作者名或标题首字母大写选项 包含超过2300个文献风格:EndNote 为重要期刊提供超过2300种预定义的文献风格。每个风格都可以修改,你也可以建立新的风格。...

    思想品德计划总结高中政治有效课堂教学探索摘记.doc

    【高中政治有效课堂教学探究】 尊敬的各位领导,同行们,大家好!我今天要与大家分享的是我在高中政治教学中关于有效课堂教学的一些探索和心得。在农村高中环境下,面对学生素质、师资力量及教学设施的局限,如何...

    阅读摘记|Facebook设计B端产品的4项基本原则 .doc

    Facebook在设计B端产品时,遵循了四个核心原则,这些原则旨在创造高效、用户导向且适应性强的企业级工具。下面是对这些原则的详细解释: 1. **帮助用户成长**:B端产品不仅要协助用户完成任务,还要促进他们的专业...

    备忘录怎么写.doc

    - 在编写备忘录时,要确保信息客观,使用简明、清晰、准确的语言。 - 备忘录可以用于追踪任务分配,避免遗漏,并确保所有相关人员对行动计划有共识。 2. **会议纪要(Minutes)**: - 会议纪要是正式的行政公文...

Global site tag (gtag.js) - Google Analytics