2017年3月21日星期二

笔记:art of r (R语言编程艺术)

命令行调用: R CMD BATCH some.R

R向量的元素索引下标:从1开始,而非0

打印元素:str(hn)

seq函数示例:example(seq)

把向量转换成矩阵:matrix(somec, ncol=2)

对向量x的每一个元素调用函数f,并将结果转化为矩阵(每个元素结果为1列): sapply(somec, f)

NULL表示不存在,不计数;NA表示缺值,但占了坑,会计数

筛选向量x[ x > 3],其中筛选条件 x>3 也是个与 x 等长的向量

subset(x, x>3) 与上者的差别是,subset会自动移除NA

2.9.1 向量函数组合简化编程 udcoor <- function(x, y) mean(sign(diff(x)) == sign(diff(y)))

2.12 注意 c(5,2, list(a=1, b=4)) 混用的后果是,扁平化

矩阵筛选行: m[m[,1] > 1 & m[,2] > 5, ]

& 是向量与,&&是标量与

apply(x, 1, somefunc, 3) : 对x的每行元素r,调用 somefunc(r, 3)

snow包的clusterApply支持多节点并行计算

禁止矩阵单行向量自动降维:r <- z[2,, drop=FALSE]

向量元素都是同类型的,列表元素可以是不同类型的

lst[["c"]] 是提取列表的单个组件,不能有多个组件 lst["c"] 是提取子列表,可以有多个组件,如 lst[1:2]

删除列表元素 : z$b <- NULL

lapply(lst, mean) 对列表的每个组件调用指定函数,返回一个新列表

sapply(lst, mean) 对列表的每个组件调用指定函数,将结果转化为矩阵或向量

用recursive=T把列表压平 c(list(a =1 , b=2, c=list(d=5,e=9)), recursive=T)

数据框是组件长度都相等的列表

提取出d4中各列都不含NA的所有行:d5 <- d4[complete.cases(d4), ]

文本分析永远不适合内心脆弱的人

按(d$gender, d$over25)将d$income分组,然后计算均值:

tapply(d$income, list(d$gender, d$over25), mean)

by与tapply功能类似,但是tapply第一个参数得是向量,by可以传入数据框

by(aba, aba$Gender, function(m) lm(m[,2] ~m[,3]))

按(d$gender, d$over25)将d$income分组:split(d$income, list(d$gender, d$over25))

对指定多个列,按指定的相同分组方式,调用tapply :

aggregate(aba[,-1], list(aba$Gender), median)

确定向量x的每个元素落到向量b的第几个区间:cut(x, b, labels=F)

取回指定名字的变量内容: z <- get(m)

for循环的返回值是NULL

没有评论:

发表评论