经管之家送您一份
应届毕业生专属福利!
求职就业群
感谢您参与论坛问题回答
经管之家送您两个论坛币!
+2 论坛币
- ---
- [cousera数据科学]R Programming
- ---
- ## 第三课 向量化运算和debug
- ### 1.loop functions
- lapply : 对list中的每一个element执行function
- sapply : 对lapply的结果尝试简化,能输出
- apply : 对数值型矩阵执行行向量或者列向量的function,仅仅代码简单,效率不高
- tapply : 对**向量**的子集执行function,多用于统计量计算
- mapply : 高维度的lapply,不明觉厉
- apply族的参数function不能用多个,比如mean,sd,range这样,但是可以自定义一个组合函数,见apply例子
- split : 虽然不是向量化运算,但是结合lapply会有很大用处
- ### 2.lapply
- 输入是list,如果不是,函数用as.list自动转换;
- 实际的循环使用C写的,所以快;
- ```{r}
- x <- list( a= 1:5, b = rnorm(10) )
- lapply( x , mean)
- ```
- ### 3.sapply
- 如果返回的每一个元素长度均为1,则整体输出一个向量
- 如果返回的每一个元素是长度相等的向量,则返回一个矩阵
- 其他,返回List
- ### 4.apply
- less type is better!
- rowSums = apply( x, 1, sum) # 这两者实现功能一样,但是左边的更快一些!
- colMeans = apply( x, 2, mean) # 同上
- apply( x , 1, median ) # 这个就只能apply了
- ```{r}
- x <- matrix( rnorm(200), 20, 10 )
- apply( x , 1, quantile , probs=c( 0.25, 0.75))
- apply( x, 1, function(x) list( q= quantile , probs=c( 0.25, 0.75) ,
- median = median(x) ,
- r= range(x)) )
- ```
- ### 5.tapply
- 与其他apply不同,它有一个index函数,指定分组用的factor或者list of factors
- ```{r}
- x <- c( rnorm(10), runif(10), rnorm(10,1) )
- f <- gl(3, 10) # gl function : gnerate factor levels
- tapply( x , f , mean)
- ```
- ### 6.split
- x是一个向量或list或data frame,f是一个factor或者list of factors
- split+ lapply/sapply比tapply在多变量场景下方便,当然更方便的是plyr包的函数
- ```{r}
- # split + apply可以用两行代码计算数据框中多个变量按分组统计的统计量
- s <- split( airquality, airquality$Month)
- lapply( s, function(x) colMeans( x[ , c("Ozone", "Solar.R", "Wind")]))
- sapply( s, function(x) colMeans( x[ , c("Ozone", "Solar.R", "Wind")]))
- sapply( s, function(x) colMeans( x[ , c("Ozone", "Solar.R", "Wind")], na.rm= T ))
- # tapply针对vector所以只能一个一个来
- tapply( airquality[ , "Ozone" ], airquality$Month, mean , na.rm=T )
- tapply( airquality[ , "Solar.R" ], airquality$Month, mean , na.rm=T )
- tapply( airquality[ , "Wind" ], airquality$Month, mean , na.rm=T )
- # 关于factor和split还有
- x <- rnorm(10)
- f1 <- gl(2,5)
- f2 <- gl(5,2)
- interaction(f1, f2)
- split( x, list(f1, f2))
- ```
- ### 7.Debug
- traceback : 查看函数调用堆栈,找到最近出错的函数,在函数套函数的场合很有用
- debug : debug模式提供函数详细,停在第一行供检查
- browser : 扔进function,运行到此时挂起,可以检查函数运行中每一步的output
- trace : 插入fuction的任意位置??
- recover : ??allows you to modify the error behavior so that you can browse the function call stack
- ```{r}
- lm( y ~ x )
- traceback()
- debug(lm)
- lm( y ~ x )
- ```
复制代码
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
|