附录C 问题答案

问题1-1

R是S编程语言的开源版本。

问题1-2

选项包括:命令式、面向对象和函数式。

问题1-3

8:27

问题1-4

help.search(这与??的效果一样)

问题1-5

RSiteSearch

问题2-1

%/%

问题2-2

all.equal (x, pi),或者更好的答案是:isTrue(all.equal(x, pi))

问题2-3

至少下面的两个:

  • <-
  • +=
  • +<<-
  • assign

问题2-4

只是Inf-Inf

问题2-5

0Inf-Inf

问题3-1

numericintegercomplex

问题3-2

nlevels

问题3-3

as.numeric ("6.283185")

问题3-4

summaryheadstrunclassattributesView中的任意三个。如果你还找出与head作用相反的——能打印出最后几行的tail函数则能加分。

问题3-5

rm(list = ls())

问题4-1

seq.int(0,1,0.25)

问题4-2

要么在创建矢量时使用name = value对,要么在之后使用names函数。

问题4-3

正整数的位置检索,负整数的位置检索,逻辑值或元素的名称。

问题4-4

3 * 4 * 5 = 60

问题4-5

%*%

问题5-1

长度为3。因为内部列表只算是一个元素,NULL元素也是一样。

问题5-2

当向函数传递参数时、调用formals时、或者在全局环境变量.Options里。

问题5-3

你可以在单方括号中结合矩阵式索引和正整数/负整数/逻辑值/字符来使用。你也可以在单或双括号中结合列表样式索引中和单个索引值使用,或者是使用美元符号($)运算符。最后,你还可以使用subset函数。

问题5-4

通过把check.names = FALSE传递给data.frame

问题5-5

可以使用rbind添加到垂直方向上,使用cbind添加到水平方向。

问题6-1

用户工作区。

问题6-2

list2env是最好的方案,不过as.environment也适用。

问题6-3

只需要输入其名称。

问题6-4

formalsargsformalArgs

问题6-5

do.call能以列表的形式把参数传递给函数。

问题7-1

主要就是formatformatCsprintfprettyNum

问题7-2

使用alarm或者把\a字符打印到控制台。

问题7-3

factorordered

问题7-4

该值将被算作缺失值(NA)。

问题7-5

使用cut来将其分组。

问题8-1

如果你传入一个NA值,if会抛出一个错误。

问题8-2

Ifelse将在条件为NA处返回NA

问题8-3

switch会基于字符或整型参数有条件地执行代码。

问题8-4

在你的循环代码中插入关键字break

问题8-5

在你的循环代码中插入关键字next

问题9-1

在各章中讨论过lapplyvapplysapplyapplymapplytapply,亦简要提及eapplyrapply。试试apropos("apply")来查看它们所有的列表。

问题9-2

所有这三个函数都接受一个列表,并把函数依次应用于每个元素上。它们所不同的是返回值。lapply总是返回一个列表,vapply总是返回一个由模板指定的向量或数组,sapply的返回值也一样。

问题9-3

rapply是递归的,它非常适合访问诸如树这样的深层嵌套对象。

问题9-4

这是一个经典的拆分-应用-合并问题。使用tapply(或plyr包中的某些函数)吧。

问题9-5

类似**ply的名称中,第一个星号表示第一个输入参数的类型,第二个星号表示返回值的类型。

问题10-1

CRAN是迄今为止最大的包库。其他的还有Bioconductor、R- Forge和RForge.net等。还可以在GitHub、bitbucket和Google Code上找到很多包。

问题10-2

这两个函数都能装载一个包,但失败时library会抛出一个错误,而require则返回一个逻辑值(让你自定义错误处理逻辑)。

问题10-3

一个包库不过就是你机器上的一个包含了R包的文件夹而已。

问题10-4

.libPaths能返回库的列表。

问题10-5

R不能像IE浏览器一样工作,但你可以使用IE浏览器的的internet2.dll库用于连接互联网。

问题11-1

必须使用POSIXct类。Date不能存储时间信息,而POSIXlt日期则把它们的数据存储为列表,这使它不能放入一个数据框里面。

问题11-2

1970年1月1日开始的午夜。

问题11-3

"%B %Y"

问题11-4

给它加上3600秒。例如:

  1. x <- Sys.time()
  2. x + 3600
  3. ##[1]“ 2013-07-17 22:44:55 BST ”

问题11-5

周期会比较长,因为2016是闰年。一年的持续时间正是60 * 60 * 24 * 365秒。对于闰年来说一年的周期是366天。

问题12-1

调用不带参数的data函数。

问题12-2

read.csv假设小数点是句号(句点)以及用逗号作为分隔符,而read.csv2则假设小数点为逗号且以分号为分隔符。read.csv用于使用句号作为小数点来创建数据的区域中(例如大多数的英语语言区域)。read.csv2则用于使用逗号作为小数点来创建数据的区域中(例如大多数的欧洲语言区域)。如果你对此不太确定,只需在文本编辑器中打开你的数据文件。

问题12-3

xlsx包中的read.xlsx2函数是首选,不过在同一个包中还有read.xlsx可用。也可以使用在其他几个包中的不同函数。

问题12-4

你可以简单地把网址传给read.csv,或使用download.file得到一个本地副本。

问题12-5

目前均支持SQLite、MySQL、PostgreSQL和Oracle数据库。

问题13-1

使用readLines把文本读取为字符向量,然后调用str_count来计算此单词在每行出现的数量,最后用sum求总和。

问题13-2

withwithintransformmutate所有这些函数和标准的赋值函数一样,都允许操纵列和把列添加到数据框中。

问题13-3

是铸造(Casting),而不是冻结

问题13-4

使用orderarrange

问题13-5

先定义一个函数,当你有一个正数—例如,当is.positive <- function(x) x> 0时返回TRUE值—然后调用Find(is.positive, x)

问题14-1

min返回其所有输入中的单个最小值。pmin接受若干长度相同的向量,并返回它们在每个位置上的最小值。

问题14-2

通过pch("plot character")参数。

问题14-3

使用形式为y 〜 x的公式。

问题14-4

Aesthetic指定一个你能看到变化的变量。大多数绘图会分别为x和y坐标取相应的xy aesthetic。你也可以指定颜色或形状的aesthetic(例如,其中两个以上的变量会被同时看到)。

问题14-5

在本章中所提及的直方图、箱线图以及核密度图均可。还有其他一些古怪而艰深的绘图,例如没有提及的小提琴图(violin plot)、轴须图(rug plot)、豆荚图(bean plot)、茎叶图(stem-and-leaf plot)等。这些图当中,你每猜中一个,就可以获得100点极客分。

问题15-1

先设置指定的种子数(使用set.seed)以生成一些随机数字,然后将种子值重置为原来的值。

问题15-2

PDF的函数名字以d开头,后面跟着分布的名称。例如,PDF格式的二项式分布函数是dbinom。 CDF函数以p开头,随后也是分布的名称,同样逆CDF函数也是以q开头随后跟着分布的名称。

问题15-3

冒号表示变量之间的交互。

问题15-4

anovaAICBIC都是用于模型比较的常见函数。

问题15-5

R^2值可以从summary(model)$r.squared中取得。

问题16-1

warnings函数可显示之前的警告。

问题16-2

失败时,try会返回一个try-error类的对象。

问题16-3

testthat中相当于checkException的是expect_exception。请立马说出来。

问题16-4

quote把一个字符串转换成一个调用,然后eval会计算它。

问题16-5

使用S3系统的重载函数。print.foo函数将会被foo类的对象调用。

问题17-1

DESCRIPTION和NAMESPACE是必须的。

问题17-2

man和R在所有软件包中都是必须的。如果你要包括C、C + +或Fortran的代码,那么src也是必要的。

问题17-3

CITATION文件让你解释是谁编写以及是谁维护包的,如果该信息是太长或太复杂,可以放到DESCRIPTION文件中。

问题17-4

roxygeniseroxygenize

问题17-5

首先通过添加调用.Deprecated来警告用户此函数将过时。然后,使用调用Defunct完全替代函数体。