又一个初学者问题。这是一个例子:
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
答案 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环境中的对象通常不是一个好主意,因为它很容易产生错误。