- 博客(60)
- 资源 (10)
- 收藏
- 关注
原创 R:访问数据库管理系统
R中有多种面向关系型数据库管理系统(DBMS)的接口,包括Microsoft SQL Server、Microsoft、Access、MySQL、Oracle、PostgreSQL、DB2、Sybase、Teradata以及SQLite。其中一些包通过原生的数据库驱动来提供访问功能,另一些则是通过ODBC或JDBC来实现访问的。使用R来访问存储在外部数据库中的数据是一种分析大数据集的有效手段,并且
2014-10-27 13:58:56
1455
原创 R:获取文件和目录信息
对于实现获取文件和目录的信息、设置文件访问权限等功能,R有各种函数。Ю file.info():参数是表示文件名称的字符串向量,函数会给出每个文件的大小、创建时间、是否为目录等信息。Ю dir():返回一个字符向量,列出在其第一个参数指定的目录中所有文件的名称。如果指定可选参数recursive=TRUE,结果将把第一个参数下面整个目录树都显示出来。Ю file.exists():返回
2014-10-27 13:57:56
12167
原创 R:写文件(输入与输出)
由于R语言主要用于统计功能,读文件可能比写文件更为常用,但是写文件有时候也很必要。 Write.table()函数的用法read.table()非常相似,只不过它把数据框写入文件而不是从文件中读取。参数和选项:write.table(x, file = "", append = FALSE, quote = TRUE, sep = " ",eol = "\n", na = "N
2014-10-27 13:52:14
21081
原创 R:读写文件(输入与输出)
►从文件中读取数据框或矩阵 可以用read.table()来读取数据框。> z > z name age1 John 252 Mary 283 Jim 19注:此处scan()不能正确读取数据框,因为这个文件中数值和字符混杂,还含有表头。 似乎没有办法直接从文件中读取数据框,不过借助其他工具可以轻松办到。一个简单快速的办法是用scan()逐行读取
2014-10-27 13:47:47
3075
原创 R:连接键盘与显示器(输入和输出)
R提供多个命令来连接键盘和显示器。►使用scan()函数 可以使用scan()从文件中读取或者用键盘输入一个向量,它可以是数值型或字符型向量。再增加一些操作,甚至可以读取数据来形成一个列表。 scan()可以快速的一次读取整个文件。scan(file = "", what = double(0), nmax = -1, n = -1, sep = "",quot
2014-10-27 13:42:24
4569
原创 R:导入其他样式数据的方法
►导入XML数据 以XML格式编码的数据正在逐渐增多。R中有若干用于处理XML文件的包。由Duncan Temple Lang编写的XML包允许用户读取、写入和操作XML文件。 对使用R存取XML文档感兴趣的读者可以参阅:www.omegahat.org/RSXML,从中可以找到若干份优秀的软件包文档。 ►从网页抓取数据 在Web数据抓取(Webscrapin
2014-10-27 13:40:05
2454
原创 R:导入Excel数据
读取一个Excel文件的最好方式,就是在Excel中将其导出为一个逗号分隔文件(csv),并使用read.table方式将其导入R中。 在windows系统中,可以使用RODBC包来访问Excel文件。电子表格的第一行应当包含变量/列的名称。 首先,下载并安装RODBC包。> install.packages("RODBC") 然后,你可以使用以下代码导入数
2014-10-27 13:38:33
7583
原创 R:从带分隔符的文本文件导入数据
可以使用read.table()从带分隔符的文本文件中导入数据。此函数可读入一个表格格式的文件并将其保存为一个数据框。其语法如下:Mytable 其中,file是一个带分隔符的ASCII文本文件,header是一个表明首行是否包含了变量名的逻辑值(TRUE或FALSE),sep用来指定分隔数据的分隔符,rows.names是一个可选参数,用以指定一个或多个表示行标识符的变量。
2014-10-27 13:35:15
19782
原创 R:使用文本编辑器手动输入数据
R中的函数edit()会自动调用一个允许手动输入数据的文本编辑器。具体步骤如下:(1)创建一个空数据框(或矩阵),其中变量名和变量的模式需要与理想中的最终数据集一致;(2)针对这个数据对象调用文本编辑器,输入数据,并将结果保存回此数据对象中。举例:创建一个名为mydata的数据框,它含有四个变量:id(数值型)、age(数值型)、gender(字符型)、weight(数值型),然后将调
2014-10-27 13:33:55
14080
1
原创 R:正则表达式
当用到编程语言中的字符串操作函数时,有时会涉及“正则表达式”这个概念。在R语言里,当使用字符串函数grep()、grepl()、regexpr()、gregexpr()、sub()、gsub()和strsplit()时,尤其需要注意。 正则表达式是一种通配符,它是用来描述一系列字符串的简略表达式。 “[au]”表示的是含有字母a或u的字符串。> grep( "[au]",
2014-10-27 10:51:09
982
原创 R:字符串操作函数
R语言提供了很多字符串操作函数。 ►grep()函数 grep( pattern,x )语句在字符串向量x里搜索给定子字符串pattern。如果x有n个元素,即包含n个字符串,则grep( pattern,x )会返回一个长度不超过n的向量。这个向量的每个元素是x的索引,表示在索引对应的元素x[i]中有与pattern匹配的子字符串。> grep( "Pole", c( "E
2014-10-27 10:49:13
1618
原创 R:集合运算
R中包含了一些方便的集合运算,主要由:Ю union(x, y):集合x和y的并集Ю intersect( x, y ):集合x和y的交集Ю setdiff(x, y):集合x和y的差集,即所有属于集合x但不属于集合y的元素组成的集合Ю setequal(x, y):检验集合x和y是否相等Ю c %in% y:成员,检验c是否为集合y中的元素Ю choose(x, y):从
2014-10-27 10:34:18
6587
原创 R:向量和矩阵的线性代数运算
向量乘以标量可以直接运算,如下所示: > y > 2 * y[1] 2 6 12 20 如果想计算两个向量的内积(也就是点积),可以使用crossprod()命令。> crossprod( 1:3, c( 5, 12, 13 ) ) [,1][1,] 68 数学意义上的矩阵乘法,要使用运算符“%*%”。> a > b
2014-10-27 10:31:48
4981
原创 R:排序
►sort()函数 对向量进行普通数值排序,可以用sort()函数完成。> x > sort( x )[1] 5 5 12 13> x[1] 13 5 12 5注:x本身没有改变。 ►order()函数 如果想得到排序后的值(数值或字符变量)在原向量中的索引,可以使用order()函数。> x > order( x )[1]
2014-10-27 10:26:52
533
原创 R:写函数代码的工具
如果要写一段只是暂时需要的短函数,一个简单快速的方法是在交互式的会话终端写出来。显然,对于更长更复杂的函数,这个方法是行不通的。 ►文本编辑器和集成开发环境 你可以使用Vim、Emacs甚至Notepad等文本编辑器,或者在集成开发环境(Integrated Drvelopment Environment,IDE)的编辑器中编写代码,然后用source()函数将代码读入R。例如,
2014-10-27 10:24:09
1868
原创 R:置换函数
先看下面一段代码:> x > names( x )NULL> names( x ) > xa b c 1 2 4 这似乎没有什麽问题?但实际上,第四行怎么可以把一个数赋值给一个函数调用的结果呢?这个特殊的现象的解释依赖于R语言中的置换函数(replacement functions)。上面那行代码实际执行的形式是:x 任何左边不是标识符(意味变量名)的赋值语句
2014-10-27 10:22:21
2557
原创 R:递归
递归(recursive)函数会调用自己本身。通过写一个递归函数f()来解决x类型的问题:1.将x类型的原始问题划分为一个或更小的x类型问题;2.在f()中,对每个较小问题调用f()函数;3.然后再在f()中,将(2)中所有结果整合起来解决这个原始问题。 递归式解决问题的一种很优雅的方法。但是递归也存在两个潜在的缺点:Ю 递归相当抽象。因为递归其实是数学归纳法证明的逆过程
2014-10-27 10:20:30
4803
原创 R:向上级层次进行写操作
环境层次中某一层次的代码对它上级层次中所有变量至少有读的权限。但在另一方面,通过标准的 如果希望对一个全局变量,或者更一般情况下,对当前层次的上级层次中任意变量进行写操作,你可以在当前层次使用超赋值运算符 ►利用超赋值运算符对非局部变量进行写操作 > x > u 6> z > two + u + z + }> two( x )>
2014-10-27 10:19:09
759
原创 R:环境和变量作用域的问题
在R语言的文献中,函数被证实地称为“闭包(closure)”。函数不仅包括参数和函数体,也包括它的“环境(environment)”。环境是由创建函数时出现的对象集构成。 ►顶层环境> w f + d + h + return ( d*(w+y) )+ }+ return ( h() )+ }> enviro
2014-10-27 10:16:09
10175
原创 R:返回值
函数的返回值可以是任何R对象。尽管返回值通常为列表形式,其实返回值甚至可以说另一个函数。 可以通过显示地调用return(),把一个值返回给主调函数。如果不是用这条语句,默认将会把最后执行的语句的值作为返回值。> oddcount#返回参数中奇数的个数function( x ){ k for( n in x ){ if( n %% 2 ==
2014-10-27 10:12:03
33759
原创 R:函数入门
R函数是第一类对象(第一类对象在计算机科学中 指可以在执行期创建并作为参数传递给其他函数或存入一个变量的实体。将一个实体转化为第一类对象的过程叫“对象化”)。这意味着函数在绝大多数情况下,也可以作为对象来操作。 创建函数的语法如下:g return ( x + 1 )} 这里,function()是一个内置的R函数,其功能就是创建函数。在它的右边,其实是fu
2014-10-27 10:08:49
3488
原创 R:控制语句
R是一种块状结构程序语言。块(block)由大括号划分,不过,当块只包含一条语句时大括号可以省略。 R语言的控制语句跟前文提到的ALGOL语言家族的控制语句非常相近。 ►循环 先看下面这段程序:> x > for( n in x ){+ print( n^2 )+ }[1] 1[1] 4[1] 9[1] 16[1] 25 这表示该循环
2014-10-27 10:02:33
1589
原创 R:表的操作
R语言中的表(table):> u > f + c( "a", "bc", "a", "a", "bc", "a", "a" ) )> tapply( u, f, length ) a bc5 2 NA #缺失值NA,事实上,这个值应该是012 1 113 2 1> table( f ) f.2f.1 a bc 5 2 0 12 1
2014-10-27 09:57:37
1159
1
原创 R:因子的常用函数
►tapply()函数 在典型的用法中,调用tapply(x,f,g)需要向量x、因子或因子列表f以及函数g。Tapply()执行的操作是,(暂时)将x分组,每组对应一个因子水平(或在多重因子的情况下对应一组因子水平的组合),得到x的子向量,然后这些子向量应用函数g()。> ages > affils > tapply( ages, affils, mean ) D R
2014-10-27 09:48:37
1145
原创 R:因子
变量可归结为名义型、有序型或连续型变量。名义型变量是没有顺序之分的类别变量。有序型变量表示一种顺序关系,而非数量关系。连续型变量可以呈现为某个范围内的任意值,并同时表示了顺序和数量。 类别(名义型)变量和有序类别(有序型)变量在R中被称为因子(factor)。因子在R中非常重要,因为它决定了数据的分析方式以及如何进行视觉呈现。 因子是R语言中许多强大运算的基础,包括许多针对表格
2014-10-27 09:33:39
2049
原创 R:关于数据框的函数
►关于函数rbind()和cbind() 矩阵函数rbind()和cbind()也同样可以用于数据框,前提是两个数据框有相同的行数或者列数。例如,可以用cbind()向数据框中添加新的列,要求新的列与原有的列长度相同。用rbind()添加新行的时候,添加的行通常是数据框或者列表的形式。> kids > ages > d > d kids ages1 Jack 1
2014-10-27 09:27:24
2272
原创 R:数据框
从直观上看,数据框类似矩阵,有行和列这两个维度。然而,数据框与矩阵不同的是,数据框的每一列可以说不同的模式(mode)。例如,某列可能由数字组成,另一列可能又字符串组成。正如列表可以类比为一维的向量,数据框则可以类比为二维数据的矩阵。这里所说的类比是异质性的,也就是说每个组件(Component)的数据类型不同。 数据框是在R中最常处理的数据结构。 就技术层面而言,数据框是每个
2014-10-27 09:22:22
2815
原创 R:在列表上使用apply()系列函数
使用lapply()和sapply()这两个函数,可以很方便地在列表上应用函数。 lapply()与矩阵apply()函数的用法相似,对列表(或强制转换成列表的向量)的每个组件执行给定的函数,并返回另一个列表。> lapply( list( 1:3, 4:6, 7:9 ), median )[[1]][1] 2 [[2]][1] 5 [[3]
2014-10-27 09:19:08
2547
原创 R:访问列表元素和值
如果列表的各元素含有标签,就可以使用names()获取它的标签。> z > ulst > class( ulst )[1] "character"> ulst name salary union "Joe" "55000" "TRUE" > z > ulst > class( ulst )[1] "numeric"> ulst
2014-10-27 09:16:43
5185
原创 R:增加或删除列表元素
列表创建之后可以添加新的组件:> z > z$c > z$a[1] "abc" $b[1] 12 $c[1] "Add" 还可以直接使用索引添加组件: > z > z[ 4 ] > z[ 5:6 ] > z$a[1] "abc" $b[1] 12 $c[1] "Add" [[4]][1] 28 [[5]][1]
2014-10-27 09:14:10
37520
原创 R:列表索引
总共有三种方法访问列表lst中的组件c,返回值是c的数据类型:●lst$c●lst[[”c”]] #是双重中括号,中括号之间不能打空格●lst[[i]] #i是c在lst中的数字编号注:列表分量常常会被编号,我们总是可以用这种编号来访问分量。后面两种方法还有另外两种:●lst[”c”]●lst[i] #i是c在lst中的数字编号
2014-10-27 09:10:08
8508
1
原创 R:创建列表(list)
向量的元素要求都是同类型的,而列表(list)与向量不同,可以组合多个不同类型的对象。列表在R中扮演着一个至关重要的角色,是数据框和面向对象编程的基础。 列表是R的数据类型中最为复杂的一种。一般来说,列表就是一些对象(或成分,component)的有序集合。列表能整合若干(可能无关的)对象到单个对象名下。例如,某个列表中可能是若干向量、矩阵、数据框,甚至是其他列表的组合。 从技
2014-10-27 09:06:50
53799
原创 R:数组
数组(array)与矩阵类似,但是维度可以大于2。数组可以通过array函数创建,形式如下:myarray 其中,vector包含了数组中的数据,dimensions是一个数值型向量,给出了各个维度下标的最大值,而dimnames是可选的、各维度名称标签的列表。 > dim1 > dim2 > dim3 > array( 1:24, c( 2, 3, 4 ), di
2014-10-27 09:03:12
789
原创 R:增加或删除矩阵的行或列
严格来说,矩阵的长度和维度是固定的,因此不能增加或删除行或列。但是可以给矩阵重新赋值,这样可以得到和增加或删除一样的效果。 函数rbind()(代表row bind,按行组合)和函数cbind()(代表column bind,按列组合)可以给矩阵增加行或列。> one > z > cbind( one, z ) one [1,] 1 1 1
2014-10-27 09:02:17
69089
2
原创 R:矩阵apply()函数
apply()函数允许用户在矩阵的各行或各列上调用指定的函数。apply()函数的一般形式为:apply( m, dimcode, f, fargs ),参数解释如下:•m 是一个矩阵。•dimcode 是维度编号,若取值为1代表对每一行应用函数,若取值为2代表对每一列应用函数。•f是应用在行或列上的函数。•fargs是f的可选参数集。 例如,对于矩阵应用该函数:
2014-10-27 08:46:33
6244
原创 R:矩阵元素筛选
和向量一样,矩阵也可以做筛选。> x > x [,1] [,2][1,] 1 2[2,] 2 3[3,] 3 4> x[ x[,2] >= 3, ] [,1] [,2][1,] 2 3[2,] 3 4 首先判断x的第二列向量x[ , 2]的哪些元素大于等于3,然后在x中使用
2014-10-27 08:43:59
10449
原创 R:矩阵工具
R中包括许多对矩阵操作的操作符和函数。 ►矩阵相乘 操作符%*% 用于矩阵相乘。n ×1 或者1 ×n 矩阵在情况允许的时候可以作为一个长度为n 的向量处理。反之,向量若出现在矩阵相乘的表达式中会被自动转换成与矩阵对应的行或者列向量。 如果A和B是大小一样的方阵,那么:> A * B 将是一个对应元素乘积的矩阵。而:> A %*% B 则是一个矩阵积。
2014-10-27 08:41:12
781
原创 R:一般矩阵运算
常见的矩阵运算,包括线性代数运算、矩阵索引和矩阵元素筛选。 ►线性代数运算 你可以对矩阵进行各种线性代数运算,比如矩阵相乘、矩阵数量乘法和矩阵加法。针对以前例子中的y,以下为这三种运算的实例:> y = matrix( c(1,2,3,4), nrow=2, ncol=2)> y + y [,1] [,2][1,] 2 6[2,] 4
2014-10-27 08:38:13
879
原创 R:矩阵初识
矩阵(matrix)是一种特殊的向量,包含两个附加的属性:行数和列数。所以矩阵也和向量一样,有模式的概念,例如数值型和字符型。(但反过来,向量却不能看作是只有一列或一行的矩阵。) 矩阵可通过函数matrix创建矩阵,一般使用格式为:mymatrix = matrix( vector, nrow = rowNumber, ncol = columnNumber, byrow = log
2014-10-27 08:25:58
1034
原创 R:测试向量相等
假设我们要测试两个向量是否相等,使用==的朴素方法将不可行:> x > y > x == y[1] TRUE FALSE FALSE 发生什么了?问题在于,我们处理的是向量化。与R中其他运算符一样,==是一个函数。事实上,==是一个向量化的函数。语句x==y是将函数==()应用到x和y的每一组元素上,得到一个布尔值的向量。 那么我们可以做什么呢?一种选择是结合
2014-10-24 18:33:25
4409
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人