附录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
0
、Inf
和-Inf
问题3-1
numeric
,integer
和complex
问题3-2
nlevels
问题3-3
as.numeric ("6.283185")
问题3-4
summary
,head
,str
,unclass
,attributes
或View
中的任意三个。如果你还找出与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
formals
、args
和formalArgs
。
问题6-5
do.call
能以列表的形式把参数传递给函数。
问题7-1
主要就是format
、formatC
、sprintf
和prettyNum
。
问题7-2
使用alarm
或者把\a
字符打印到控制台。
问题7-3
factor
或ordered
问题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
在各章中讨论过lapply
、vapply
、sapply
、apply
、mapply
和tapply
,亦简要提及eapply
和rapply
。试试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秒。例如:
x <- Sys.time()
x + 3600
##[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
with
、within
、transform
和mutate
所有这些函数和标准的赋值函数一样,都允许操纵列和把列添加到数据框中。
问题13-3
是铸造(Casting),而不是冻结!
问题13-4
使用order
或arrange
。
问题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坐标取相应的x和y 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
anova
、AIC
、BIC
都是用于模型比较的常见函数。
问题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
roxygenise
或roxygenize
问题17-5
首先通过添加调用.Deprecated
来警告用户此函数将过时。然后,使用调用Defunct
完全替代函数体。