为何无return语句的lapply匿名函数返回1?
问题
我用lapply修改数据框列表时忘记加return语句,对输出结果的产生原因感到困惑。示例代码如下:
val <- list(data.frame('x'=1:4), data.frame('x'=letters[1:4])) lapply(val, function(subval) { val$flag<-1 })
返回结果为:
[[1]] [1] 1 [[2]] [1] 1
我知道在函数末尾添加val语句就能返回目标对象,但好奇{、$、<-是如何共同作用产生返回值1的。(注:重点并非正确实现代码,正确代码仅作参考:
val <- lapply(val, function(subval) { val$flag<-1 val }) ```) ## 原因解析 - **R函数的默认返回逻辑**:R里的函数不需要显式写`return()`,默认会返回函数体最后一条语句的执行结果。你的匿名函数里只有`val$flag<-1`这一条语句,所以函数返回的就是这条语句的结果。 - **赋值运算符`<-`的特性**:在R中,赋值语句本身会返回被赋予的值。比如你在控制台输入`a <- 5`,这条语句的输出就是5——赋值操作完成后,会把赋的值返回来。 - **`$`的作用**:`val$flag<-1`是给列表`val`新增(或覆盖)一个叫`flag`的元素,把它设为1。这条赋值语句的返回值就是被赋的1,所以匿名函数每次执行都会返回1。 - **`{}`的作用**:这里的大括号是用来包裹函数体的,你的函数体只有一条语句,所以大括号不影响返回结果;如果函数体有多条语句,大括号会明确代码范围,函数依然返回最后一条语句的结果。 内容的提问来源于stack exchange,提问作者AdamO
相关产品推荐
相关产品推荐

