全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
2191 14
2013-04-15
悬赏 10 个论坛币 未解决
s1 <- function(x, y = substitute(x)) { x <- x + 1; y }
s2 <- function(x, y) { if(missing(y)) y <- substitute(x); x <- x + 1; y }
a <- 10
s1(a) # 11s2(a) # a谢谢!

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-4-16 08:25:04
直接在function里定义缺省值的话,他会在最后用到的时候执行,这里就是最后一句。而用if语句的话,一开始就执行了,后面就没他什么事了。回答完毕。不好意思一开始回答错了,非常抱歉
ps:stata版大改行了?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-4-16 09:37:31
这是R特有的一个性质,叫做lazy evaluation, 只有在需要的时候才evaluate他的值
所以这两个函数evaluate的时间不同
s1里面,y=substitue(x) 是最后执行y语句时候才evaluate的(虽然他是再函数定义里面,但是因为没需要所以一直没有evaluate),这个时候 x变成11了,所以y是11
s2里面,y一开始就evaluate了,这个时候x才是10,所以y是10
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-4-16 09:40:54
求证1加1 发表于 2013-4-16 08:25
直接在function里定义缺省值的话,在函数全局都会有效,也就是一直到函数执行完毕,y=x恒成立。而用if语句的 ...
这个解释肯定不对, 比如

s1 <- function(x, y = substitute(x)) { y; x <- x + 1; y }
s1(10) 还是 10
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-4-16 10:33:09
ntsean 发表于 2013-4-16 09:40
这个解释肯定不对, 比如

s1
对对 不好意思 我刚才脑子抽风了 非常抱歉
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-4-16 11:37:30
ntsean 发表于 2013-4-16 09:37
这是R特有的一个性质,叫做lazy evaluation, 只有在需要的时候才evaluate他的值
所以这两个函数evaluate的时间不同
s1里面,y=substitue(x) 是最后执行y语句时候才evaluate的(虽然他是再函数定义里面,但是因为没需要所以一直没有evaluate),这个时候 x变成11了,所以y是11
s2里面,y一开始就evaluate了,这个时候x才是10,所以y是10
这里s1(a)的结果是11,s2(a)的结果是a
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群