【发布时间】:2019-03-28 00:14:22
【问题描述】:
我想每次使用函数的输出在向量上应用相同的函数一定次数。
一个简单的例子,一个简单的功能只是为了演示:
# sample vector
a <- c(1,2,3)
# function to be applied n times
f1 <- function(x) {
x^2 + x^3
}
我想在a、n 上申请f1 的次数,例如这里说3 次。
我听说purrr::reduce 或purrr::map() 可能是一个好主意,但无法实现。
如果n = 3 的期望输出将等于f1(f1(f1(a)))。
【问题讨论】:
-
你应该让你的函数
return一些东西。 -
@apitsch,它确实是隐含的。也就是说,如果功能块中的最后一行代码是
x^2 + x^3,这相当于return(x^2 + x^3)和tmp <- x^2 + x^3 ; return(tmp)。 -
@r2evans 感谢您告诉我。很高兴学到新东西。
-
BTW:@apitsch,这个可以咬你:如果函数做了部分赋值比如
mtcars$cyl <- mycars$cyl + 1,那么返回的值不是mtcars,而是@ 987654335@,一个常见的错误。您可以看到分配是不可见返回通过将调用包装在括号中分配的值,如(在您的控制台上)(mtcars$cyl <- mycars$cyl + 1)。出于这个原因,许多人(正如您所建议的那样)认为明确的return(...)语句可能是一件好事。 -
@r2evans
return仅在特殊情况下才需要...在一般情况下,返回函数内计算的最后一个表达式。仅当您想跳出函数并在此之前返回一个值时,您才需要显式的return语句。return不影响返回值的“可见性/不可见性”:例如,赋值返回已赋值但这样做不可见的值。试试fun <- function(x) return(a<-x)-- 现在fun(3)==3等于TRUE但fun(3)不会在屏幕上显示任何值。但是fun <- function(x) (a<-x)的行为会有所不同。