好吧,瞄函数构造的话还是用str(fun)方便些,用fun,太杂,不爽

3.1各种-apply(即简化循环)

各种,一个辅助的split,较之前只会subset要强一些哈.最后一个mapply是一个multivariate多元应用

lapply用c语言编的,所以呢。。。。

用c编的会快点,但有点用formals(fun)看形参,body(fun)看方法体,page(fun)将具体的以rpage的形式打出来,fun,这些用来查看的函数可能就没用了,那后面的...则是fun中的参数,要记住哦

lapply的返回值会无视输入值的类型,变成一个列表

如x<-list(a=1:5,b=rnorm(10))
> x
$a
[1] 1 2 3 4 5
$b
 [1] -0.8774361 -2.0198487 -1.3250659 -1.0528759
 [5]  1.9882519  0.2930956 -1.3617602 -1.0195050
 [9]  0.8024887  0.1371713
> lapply(x,mean)
uniform distribution均匀分布,如runif(1)产生1位。。。。

如> x <-1:4

[[1]]
[1] 8.
> lapply(x,runif)
[[1]]
[1] 0.8964254
[[2]]
[1] 0.94694692 0.02346353
[[3]]
[1] 0.4468687 0.6815853 0.5211994
[4]]
[1] 0.01230543 0.75179793 0.26955648 0.81547236

而另一个lapply(x,runif,min=0,max=10)
[[1]]
[1] 8.552639
[[2]]
[1] 9.914502 9.093752
[[3]]
[1] 4.622779 4.540884 5.556758
[[4]]
[1] 3.066473 3.867984 3.878329 5.600041

好吧,lapply的另一个好处就是匿名函数的运用

x <-list(a=matrix(1:4,2,2),b=matrix(1:6,3,2))
> x
$a
     [,1] [,2]
[1,]    1    3
[2,]    2    4

$b
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6

lapply(x,function(elt) elt[,1])
$a
[1] 1 2
$b
[1] 1 2 3

这里相当于现做了一个函数,形参为elt。即function(elt){elt[,1]},这种函数只有在lapply出现的时候才会出现,用完了就自动扔了,所以才叫匿名函数,用得很heavily

另一种有意思的实验

sapply(x,class)
       a        b 
"matrix" "matrix" 
> lapply(x,class)
$a
[1] "matrix"
$b
[1] "matrix"
> class(lapply(x,class))
[1] "list"
> class(sapply(x,class))
[1] "character"

这例子是把第三个维去掉,这相当于10个2*2的矩阵

class(tapply(x,f,mean))   tapply默认simplify=True  ,加了simplify=False之后,就成了list

[1] "array"

然后就是split,split是一大神器,与apply,lapply,sapply合用,比较厉害的

如上例中

split(x,f)
$`1`
 [1]  0.79150069 -0.08758313  0.11875259  1.06214913
 [5]  0.18936631  1.52672816  0.38512782  0.09617051
 [9]  0.49608406 -0.14524562
$`2`
 [1] 0.1372091 0.5180116 0.2609488 0.3998524 0.8659073
 [6] 0.9294329 0.8947693 0.6235423 0.2145166 0.3253637
$`3`
 [1]  1.2545476  0.2108688  1.3833433  1.2230497
 [5]  0.2912928  0.2959154  0.2218635 -0.3192566
 [9]  2.6216614 -0.3427608

常用的组合为lapply与split

如lapply(split(x,f),mean)
$`1`
[1] 0.4433051
$`2`
[1] 0.5169554
$`3`
[1] 0.6840525          在这种情况下呢用tapply显得更爽,毕竟,它用的代码少啊

当然,split可以处理更复杂的对象类型啊

处理数据框就很不错啊

s<-split(airquality,airquality$Month)

lapply(s,function(x) colMeans(x[,c("Ozone","Solar.R","Wind")]))
$`5`
   Ozone  Solar.R     Wind 
      NA       NA 11.62258 
$`6`
    Ozone   Solar.R      Wind 
       NA 190.16667  10.26667 
$`7`
     Ozone    Solar.R       Wind 
        NA 216.483871   8.941935 
$`8`
   Ozone  Solar.R     Wind 
      NA       NA 8.793548 
$`9`
   Ozone  Solar.R     Wind 
      NA 167.4333  10.1800

好吧,来个花样split

用来搞列联表,爽翻了

注意,别sb似的觉得1.2就是小数1.2,其实可以看作是文章中的第一章第二小节的意思,是两个因子多个水平,现在跟统计一结合,明白了些些啊

当然会存在一些空的水平

如果用rep(1:4,4:1)的话会返回一个向量,而用as.list(rep(1:4,4:1)的话,返回的列表则是一个长度一个位置,故不如mapply啊,当然上面

我用了split(rep(1:4,4:1),rep(1:4,4:1))也能得出一样的结果

据老师说它用上图这种方式得不到想要的结果,而用下图的则可以的

注意这两者之间的差别

用这种方法可以向量化函数,当函数的参数无法向量化的时候   ,上面那个rep参数就可以向量化      instant vectorization即时向量化

也就是说上面这个跟这个是一样的,即list(noise(1,1,2),noise(2,2,2),noise(3,3,2),noise(4,4,2),noise(5,5,2))也等于lapply(1:,noise,mean=1,sd=2)

printmessage2 <- function(x) {if(is.na(x))print("x is a missing value!")else if(x > 0)print("x is greater than zero")elseprint("x is less than or equal to zero")invisible(x)
}

invisible的作用Return a (temporarily) invisible copy of an object.

This function can be useful when it is desired to have functions return values which can be assigned, but which do not print when they are not assigned.

如:# These functions both return their argument
f1 <- function(x) x
f2 <- function(x) invisible(x)
f1(1)  # prints
f2(1)  # does not

traceback

> mean(x)
Error in mean(x) : object 'x' not found
> traceback()
1: mean(x)
> 
这个函数只能用于显示最近的错误,所以要赶紧用哦

debug

> debug(lm)
> lm(y ~ x)
debugging in: lm(y ~ x)
debug: {ret.x <- xret.y <- ycl <- match.call()...if (!qr)z$qr <- NULL z
}
Browse[2]>
这个吧,就是按n,按n呢就下一行,再按一次又是下一行,于是到了错误行,会自动出现错误

recover

> options(error = recover)
> read.csv("nosuchfile")
Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") :cannot open file ’nosuchfile’: No such file or directoryEnter a frame number, or 0 to exit1: read.csv("nosuchfile")
2: read.table(file = file, header = header, sep = sep, quote = quote, dec =
3: file(file, "rt")Selection:
反正呢1是2,2是3的延伸,如此如此,即可,点1,2,3则分别可见其相应环境

Debugging

Summary

  • There are three main indications of a problem/condition: messagewarningerror

    • only an error is fatal
  • When analyzing a function with a problem, make sure you can reproduce the problem, clearly state your expectations and how the output differs from your expectation
  • Interactive debugging tools tracebackdebugbrowsertrace, and recover can be used to find problematic code in functions
  • Debugging tools are not a substitute for thinking!

R语言程序设计 week3相关推荐

  1. 【一天一门编程语言】R 语言程序设计极简教程

    R 语言程序设计极简教程 文章目录 R 语言程序设计极简教程 R语言简介 1.1 介绍 1.2 R 语言的基础知识 1.2.1 语法 1.2.2 数据类型 1.2.3 基本操作 1.3 R 语言的高级 ...

  2. R语言程序设计中的for循环实战

    R语言程序设计中的for循环实战 目录 R语言程序设计中的for循环实战 R语言控制结构(Control Structures) R语言程序设计中的fo

  3. R plot图片背景设置为透明_数据科学06 | R语言程序设计模拟和R分析器

    模拟simulation ➢概率函数 概率函数通常用来生成特征已知的模拟数据,以及在统计函数中计算概率值. 对于任意分布有四种基本函数: 前缀 作用 d 产生随机数 r 估计概率分布的密度 p 估计累 ...

  4. H G W S哪一个不是状态函数_数据科学05 | R语言程序设计调试工具与str函数

    调试工具debugging tools ➢条件condition 用于提示运行函数过程中意外事件或错误的发生,编写函数时可以自行创造新的提示条件. message:由message()产生,输出提示信 ...

  5. 【问题导向】利用R语言进行情感分析

    目录 前言 问题分析 R语言的安装 情感分析 分类的原理 未来学习计划 引文 前言 R语言是统计领域的一个重要工具,其中有很多独特的包能够实现特定功能,在进行GIS分析时有非常大的用处. 笔者最近在帮 ...

  6. R语言 echarts4r 不显示图形_9本R语言书,从入门到进阶都在这里了!

    程序猿们都知道,人民邮电出版社有很多关于R语言的书,今天小编带大家了解一下R,从入门到进阶,都在这了. 最新上架 R语言之书:编程与统计 作者:[新西兰]蒂尔曼·M. 戴维斯(Tilman M. Da ...

  7. R语言绘制简单条形图

    自己用了一个csv文件 要求: 数据:data3_1.csv.根据2000个消费者网购情况的调查数据,分别绘制性别, 大数据 R 语言程序设计实验 河北地质大学 信息工程学院 大数据专业 网购次数和满 ...

  8. R语言 echarts4r 不显示图形_9本R语言书,从入门到进阶都在这了

    近期异步社区最新上架了两本R语言,小编带大家了解一下R语言书,从入门到进阶,都在这了.因为夏季即将到来,小编字体用了绿色,嘿嘿!最新上架 R语言之书:编程与统计 作者:[新西兰]蒂尔曼·M. 戴维斯( ...

  9. 推荐几本关于R语言的书

    R语言是一种严谨且对字符敏感的解释性语言,这意味着我们在控制台和命令行界面输入的指令要符合特定的语法规则.只有这样,软件才能够解释并执行代码,最后返回结果. R语言的前身是S语言,S语言是John M ...

最新文章

  1. PHP中的替代语法(冒号、endif、endwhile、endfor)
  2. DataGrid双向排序以及给HeaderText加图标
  3. jquery生成一个li_jquery-创建元素和添加子元素
  4. 后台开发(1)---app后台开发入门
  5. python 经典函数
  6. 我眼中的解决方案架构师
  7. 有效查看笔记本的cpu类型、内存品牌、硬盘颗粒类型
  8. 转:中文汉字占二个字节还是三个字节长度
  9. Android 扫码盒子全局接收付款码(全局事件上层接收多重下发)
  10. Elasticsearch系列01:基础教程
  11. 基于yolov3的目标检测与LPRnet字符识别的车牌识别(CCPD2020新能源车牌数据集)
  12. 前人对ACM学习的一些总结
  13. 算法设计与分析 Dij证明
  14. 友盟的Common的包下载失败,报错Forbidden
  15. 现代A200(MoboDA3360)玩家宝典
  16. python实现对密码的加密和解密
  17. STM32中ETH驱动配置注意事项dp83848, ip101alf, ip101gr, RTL8201,LAN8720
  18. 2021年起重机械指挥新版试题及起重机械指挥考试试题
  19. shell脚本之sed编辑器
  20. PLC远程上下载程序,一台物联网网关轻松解决

热门文章

  1. java调用corba_用JACORB开发corba应用
  2. 服务器虚拟化分类,虚拟化技术分四大类 你都学会了吗?
  3. linux 软连接 创建/查看/删除
  4. BTC/ETH历史行情数据/期权/合约成交数据分析工具
  5. 手机中微信无法直接打开棋牌游戏类app下载链怎么办?
  6. Echart的效果图表(组件都是引入echart的块)
  7. matlab画图 legend的位置
  8. [Ogre中文社区] 来自ogre3d.cn的 [英雄贴]
  9. 【Android】上拉加载更多,下拉刷新数据快速实现
  10. Visio 方向键 对象不能移动