R 是一种强大的语言,可用于内存中统计计算和图形显示。它类似于 SAS、IBM SPSS® Statistics、MATLAB 或 FORTRAN,但它是开源的。有一些转换器可以很容易地将以 SAS、IBM SPSS Statistics 或 MATLAB 格式保存的数据移动到 R。此外,R 配备了通过 Comprehensive R Archive Network (CRAN) 提供的大量软件包。CRAN 提供了一些功能,这些功能类似于针对 Perl 语言的 CPAN,或者针对 Ruby 语言的 Rubygems.org。R 还集成了 InfoSphere BigInsights(参见 参考资料)。 InfoSphere BigInsights 使用 JSON 格式来保存和显示数据,本文将介绍如何结合使用 JSON 与 R。JSON 是一个键值数据存储,可以直接映射到 JavaScript 对象。本文使用一组示例学生及其各自的考试成绩。
设置开发环境
首先,您需要设置开发环境。您需要使用 R,而且可以选择使用 RStudio 集成开发环境(IDE)。大多数软件包管理系统(apt、yum 等)默认情况下都提供了 R 版本 2.15,但是,如果想用最版的 R(在撰写本文时的最新版本是 3.0.2),则必须编辑您的可用数据源。
deb wheezy-cran3/
用离您最近的镜像替换 favorite-cran-mirror。关于 CRAN 镜像的列表,请参见 参考资料。除了基于终端的 R 界面之外,您的 CRAN 镜像还为其他发行版本(比如 Red Hat Enterprise Linux®、SuSE 和 Ubuntu 等)提供了指令。
install.packages("rjson")
然后使其可用:
library("rjson")
您可以使用 CRAN 上提供的任何软件包的名称替换 rjson。
grades=fromJSON(file = '/path_to_file/grades.json', unexpected.escape = "error")
用您的文件路径替换 path_to_file。
基本的 R 命令 您可以在 R 中使用 help 函数了解关于任何给定命令的更多信息:
help(name_of_command)
或者,您可以使用下面的命令:
?name_of_command
用您想学习的命令的名称替换 name_of_command。例如,想要阅读 library 命令的帮助页,只需输入 help(library)。这将打开 library 函数的帮助页。输入 q 会退出帮助页并返回 R shell。
gsub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,fixed = FALSE, useBytes = FALSE)
例如,gsub("A", "a", grades) 在返回值中将每个大写的 A 转换为小写 a。perl 标志使得 R 使用 Perl 兼容的正则表达式库,而不是使用标准的正则表达式,如果想从 Perl 导入现有的正则表达式规则,可能会用到这个标志。 sub() 方法更改了匹配模式的第一次出现。而 gsub() 则更改了该模式的所有出现。
system('echo "something"', intern=TRUE)
也许下面的命令是更有用的示例,该命令利用底层 shell 可用的任何语言的任意脚本中的返回值来创建 R 对象:
system('./my/script/here.pl', intern=true)
R JSON 数据类型
清单 1. 在 R 中的 JSON 数据的结构
str(grades)
List of 4
$ : List of 4
..$ name : chr "Amy"
..$ grade1: num 35
..$ grade2: num 41
..$ grade3: num 53
$ : List of 4
..$ name : chr "Bob"
..$ grade1: num 44
..$ grade2: num 37
..$ grade3: num 28
$ : List of 4
..$ name : chr "Charles"
..$ grade1: num 68
..$ grade2: num 65
..$ grade3: num 61
$ : List of 4
..$ name : chr "David"
..$ grade1: num 72
..$ grade2: num 78
..$ grade3: num 81
确定要提取哪些数据点,并使用 c(),或者使用联接,以便提取数据,如下所示:
grade1.num <- c(grades[[1]]$grade1, grades[[2]]$grade1, grades[[3]]$grade1,grades[[4]]$grade1)
此命令函数将会创建一个新的对象 (grade1.num),其中包括每个学生第次考试的分数。grade1.num 现在是一个数值矢量,是 R 中最基本的数据类型。如果要删除 R 对象,那么可以发出 rm() 命令。例如,rm(grade1.num) 删除了刚刚从 R 会话创建的 grade1.num 对象。要为某个给定学生的成绩创建一个对象,可以发出以下命令:
Amy.grade< - c(grades[[1]]$grade1, grades[[1]]$grade2, grades[[1]]$grade3)
该命令使用了赋值运算符,包括大于 (>) 或小于 (<) 符号,具体情况取决于赋值的方向,该命令还结合使用了一个连字符 (-)。通过索引号(例如,[[1]] 是第一个列表),或者通过带美元符号运算符的名称(例如,$grade1),访问以列表格式保存的项中的独立元素。
Bob.grade <- c(grades[[2]]$grade1, grades[[2]]$grade2, grades[[2]]$grade3)
Charles.grade <- c(grades[[3]]$grade1, grades[[3]]$grade2, grades[[3]]$grade3)
David.grade <- c(grades[[4]]$grade1, grades[[4]]$grade2, grades[[4]]$grade3)
接下来,用下面的命令将所有的矢量组合成一个数据帧:
All.grades <- data.frame(Amy.grade, Bob.grade, Charles.grade, David.grade)
从逗号分隔值或电子表格程序导入 R 的数据也会成为 data.frame 对象,使用处理器内置到 R 中。 R 统计函数 要想对 grade1.num 的统计性质有基本的了解,可以使用 summary 命令:
summary(Amy.grade)
Min. 1st Qu. Median Mean 3rd Qu. Max.
35 38 41 43 47 53
summary 命令也可以用于数据帧。summary(All.grades) 的输出与清单 2 相似。
清单 2. 在 R 中的数据帧汇总
summary(All.grades)
Amy.grade Bob.grade Charles.grade David.grade
Min. :35 Min. :28.00 Min. :61.00 Min. :72.0
1st Qu.:38 1st Qu.:32.50 1st Qu.:63.00 1st Qu.:75.0
Median :41 Median :37.00 Median :65.00 Median :78.0
Mean :43 Mean :36.33 Mean :64.67 Mean :77.0
3rd Qu.:47 3rd Qu.:40.50 3rd Qu.:66.50 3rd Qu.:79.5
Max. :53 Max. :44.00 Max. :68.00 Max. :81.0
为了确定两个矢量是否统计相关,可以使用处理数值矢量的易于使用的 R 函数:cor()。例如,您可以使用下面的命令来检查 Bob.grade 和 Amy.grade 对象之间的关联:
cor(Amy.grade, Bob.grade)[1] -0.9930365
备注:方差和协方差使用了与关联相同的语法,但它们分别使用了 cov() 和 var() 函数,如下所示:
cov(Amy.grade, Bob.grade)
[1] -73
var(Amy.grade, Bob.grade)
[1] -73
要计算平均绝对偏差,可以使用 mad() 函数:
mad(Charles.grade)[1] 4.4478
另一个处理数值矢量的有用函数是 sd()。此函数将会检查两个或两个以上矢量的标准偏差:
sd(Amy.grade)[1] 9.165151
该函数显示了 Amy 的成绩的标准偏差为 9.165151。
清单 3. Kolmogorov-Smirnov 测试
ks.test(Amy.grade, Bob.grade)
Two-sample Kolmogorov-Smirnov test
data:Amy.grade and Bob.grade
D = 0.3333, p-value = 1
alternative hypothesis: two-sided