在下面显示的函数中,没有return
。但是,执行之后,我可以确认这个值正常进入了d
。
没有返回
。在这方面的任何建议将不胜感激。
代码
#installed plotly, dplyr
accumulate_by <- function(dat, var) {
var <- lazyeval::f_eval(var, dat)
lvls <- plotly:::getLevels(var)
dats <- lapply(seq_along(lvls), function(x) {
cbind(dat[var %in% lvls[seq(1, x)], ], frame = lvls[[x]])
})
dplyr::bind_rows(dats)
}
d <- txhousing %>%
filter(year > 2005, city %in% c("Abilene", "Bay Area")) %>%
accumulate_by(~date)
最佳答案
在函数中,最后一个赋值是创建“dats”,它通过 bind_rows(dats)
返回我们不需要显式的 return
语句。假设,如果有两个对象要返回,我们可以把它放在一个list
在某些语言中,例如 python
,为了提高内存效率,使用 generators
来 yield
而不是在内存中创建整个输出,即考虑python
def get_square(n):
result = []
for x in range(n):
result.append(x**2)
return result
当我们运行它时
get_square(4)
#[0, 1, 4, 9]
同样的功能可以写成一个generator
。而不是返回
任何东西,
def get_square(n):
for x in range(n):
yield(x**2)
运行函数
get_square(4)
#<generator object get_square at 0x0000015240C2F9E8>
通过使用 list
进行转换,我们得到相同的输出
list(get_square(4))
#[0, 1, 4, 9]
关于r - 当用户定义的 R 函数不返回值时,为什么会发生这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49399414/