正如前面展示的,lapply( )函数接收一个向量和一个函数作为输入参数。它将这个
函数应用到向量中的每个元素,再将结果以列表的形式返回。
当每次迭代都是相互独立时,这个函数就非常好用。因为在这种情况下,我们不需要
构建一个显式迭代器来明确每步迭代过程。
lapply( )不仅适用于向量,也适用于列表。假设我们有一份学生列表:
students <- list(
a1 = list(name = "James", age = 25,
gender = "M", interest = c("reading", "writing")),
a2 = list(name = "Jenny", age = 23,
gender = "F", interest = c("cooking")),
a3 = list(name = "David", age = 24,
gender = "M", interest = c("running", "basketball")))
现在,我们想创建一个字符向量,其中每个元素都具有如下形式:
James, 25 year-old man, loves reading, writing.
函数 sprintf( )通过将占位符(例如: %s 对应字符串, %d 对应整数)替换为相应
的输入参数来格式化文本。举个例子:
sprintf("Hello, %s! Your number is %d.", "Tom", 3)
## [1] "Hello, Tom! Your number is 3."
返回到我们的问题上来,每次迭代都是作用在列表 students 上,并且是相互独立的。
换句话说,对 James 的相关操作与 Jenny 无关,以此类推。所以,我们可以使用 lapply( )
执行这项工作:
lapply(students, function(s) {
type <- switch(s$gender, "M" = "man", "F" = "woman")
interest <- paste(s$interest, collapse = ", ")
sprintf("%s, %d year-old %s, loves %s.", s$name, s$age, type, interest)
})
## $a1
## [1] "James, 25 year-old man, loves reading, writing."
##
## $a2
## [1] "Jenny, 23 year-old woman, loves cooking."
##
## $a3
## [1] "David, 24 year-old man, loves running, basketball."
上述代码使用了一个匿名函数。所谓匿名函数就是没有使用常规赋值运算符将其绑定
给某个符号的函数,简言之,就是创建了一个没有命名的函数。当然,我们也可以将函数
明确地绑定给某个符号,也就是赋予函数一个名称,然后在 lapply( )中使用函数名。
尽管如此,代码已经非常直观了。对于 students 中的每个元素 s ,函数重新定义了学生
类型,并以逗号为分隔符,将他们的兴趣连接在一起,最后以我们希望的形式整合所有信息。
幸运的是,lapply( )的主要使用方式与 apply( )函数族的其他函数是相通的,但
它们的迭代机制或结果的返回形式可能有所不同。

最新文章

  1. Java基础学习 -- 接口
  2. iOS-定时器
  3. Entity Framework(1)
  4. 【linux】 静态库编译
  5. C++ Primer Plus(第6版)中文版——课后练习程序代码
  6. Android应用程序的安装位置
  7. C++ STL源代码学习(map,set内部heap篇)
  8. java.util.concurrent BlockingQueue
  9. TOMCAT-publishing to tomcat v7.0 server at
  10. CJOJ 1087 【NOIP2010】乌龟棋 / Luogu 1541 乌龟棋(动态规划)
  11. MongoDB 安装和配置
  12. Handler,MessageQueue Loop 和Message的原理解析
  13. 0x16 Tire之最大的异或对
  14. bzoj2252 矩阵距离
  15. 将sublime添加到鼠标右键
  16. MVC基础篇—控制器与视图数据的传递
  17. ntp服务问题
  18. Java 递归详解
  19. 彻底理解Java的feature模式
  20. vue经验 - 那些自己给自己挖的深坑

热门文章

  1. jfinal怎么给model增加自定义的字段作为DTO?
  2. html&lt;input&gt;输入框中各种正则表达式设置
  3. (转)Python学习路径及练手项目合集
  4. V2EX的RSS订阅地址
  5. scrapy爬虫系列之五--CrawlSpider的使用
  6. python之sys.stdout、sys.stdin以及设置打印到日志文件等
  7. window 安装 Twisted 遇到的问题
  8. SELINUX导致数据修改权限不成功
  9. 模仿Masonary写一个计算器
  10. Spring整合Mybatis解决 Property &#39;sqlSessionFactory&#39; or &#39;sqlSessionTemplate&#39; are required