如何在嵌入式函数中存储值

时间:2015-09-20 20:19:43

标签: r

又一个初学者问题。这是一个例子:

store <- as.numeric()
multi.fun <- function(x) { t <- x*2; return(t) }
main.fun <- function(x) { store[i] <- multi.fun(x)+x; sum(tail(store,2)) }

x <- 1:10

ret <- as.numeric()

for(i in 1:10) {
 print(main.fun(x[i])); Sys.sleep(0.2)
}

是否可以在每次迭代时将值分配给store对象?

编辑:这意味着它将在函数内部进行求值,以便最后一个总和(tail(..,2))将给出最终结果:

9 15 21 27 33 39 45 51 57

并且store[i] <- multi.fun(x)+x会给出:

[1] 3 6 9 12 15 18 21 24 27 30

1 个答案:

答案 0 :(得分:3)

我认为您可能需要的是<<-运算符,它允许您访问全局环境中的对象(此时)。

将主函数编写为:

main.fun <- function(x) { store[i] <<- multi.fun(x)+x; sum(tail(store,2)) }

您的流程可以按照您的意愿执行:

store <- as.numeric()
multi.fun <- function(x) { t <- x*2; return(t) }
main.fun <- function(x) { store[i] <<- multi.fun(x)+x; sum(tail(store,2)) }

x <- 1:10

ret <- as.numeric()

for(i in 1:10) {
  print(main.fun(x[i])); Sys.sleep(0.2)
}

输出:

[1] 3
[1] 9
[1] 15
[1] 21
[1] 27
[1] 33
[1] 39
[1] 45
[1] 51
[1] 57

但是,使用函数更改Global环境中的对象通常不是一个好主意,因为它很容易产生错误。