找回密码
 立即注册
查看: 2900|回复: 3

R语言里面函数的一个问题

[复制链接]
发表于 2016-3-26 21:26:45 | 显示全部楼层 |阅读模式
今天在http://adv-r.had.co.nz/Functions.html 里面描述函数用变量Lazy evaluation特性的例子:
add <- function(x) {
  function(y) x + y
}
adders <- lapply(1:10, add)
adders[[1]](10)
#> [1] 11
adders[[10]](10)
#> [1] 20


我试了一下,结果跟它有点不同,两个都返回20.我现在的问题是,这个自定义函数add里面,y的变量值是哪里来的呢?
单独调用add(10)返回的结果也很奇怪,有没有人可以帮忙解释一下,谢谢。


另外在http://adv-r.had.co.nz/Functional-programming.html帖子里面,作者要把一个data.frame里面所有的NA元素都变成-99,他提供的函数如下:
fix_missing <- function(x) {
  x[x == -99] <- NA
  x
}
这里对于x[x==-99]这里没有看懂,希望大神能够帮忙解释一下,谢谢。
回复

使用道具 举报

发表于 2016-3-29 21:56:56 | 显示全部楼层
x[x == -99] 是向量筛选,
提取x中等于-99的元素。是把-99都变成NA吗?
回复

使用道具 举报

发表于 2016-3-31 11:50:07 | 显示全部楼层
X==-99 是先判断是不是-99,然后返回 T or F,布尔型,比如说返回(1,0,1,0,0……)对应每个位置,然后再作为下标进去就相当于把1位置的向量取出来了
回复

使用道具 举报

发表于 2016-4-11 15:25:01 | 显示全部楼层
本帖最后由 lchy1217 于 2016-4-11 15:26 编辑

这个函数体的使用你好像没弄明白吧,正确的调用方式是adders()();前一个括号内填x的值,后一个括号内填y的值;adders <- lapply(1:10, add)这一句已经给x赋值了,1~10的一个向量,序号和数值是相同的,adders[[1]](10)对x指定第一个元素,对y赋值为10。
我们把它改一下,序号为1~10的x向量给它赋值11~20,似乎更好理解,计算结果如下:

> adders<-lapply(11:20,add)
> adders[[1]](10)
[1] 21
> adders[[10]](10)
[1] 30

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|R语言中文网

GMT+8, 2024-11-23 13:42 , Processed in 0.020634 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表