for循环中的局部变量?

时间:2014-01-28 20:01:15

标签: r for-loop

是否可以在for循环中定义本地变量,以便无法在循环外访问它?在下面的简单示例中,我应该怎么做才能在循环外定义index

input<-rnorm(10)
output<-rep(NA,10)

for(i in 1:10){
     index<-1:i
     output[i]<-sum(input[index])^2
     }

3 个答案:

答案 0 :(得分:8)

假设这只是一个玩具示例而且您的实际情况更复杂,您可以将for循环包装在local的调用中,并将作用于output的赋值运算符更改为{{ 1}}。

<<-

答案 1 :(得分:2)

简短的回答是否定的。

您可以在使用或删除后NULL变量,如评论中所建议的那样,但如果您想要做的是封装特定循环正在做的事情,最佳做法是将其放置成功能。这样您就可以确保变量的范围是正确的,并且您不必依赖自己记住NULL变量或将其删除。

答案 2 :(得分:0)

您可以在新环境中运行代码并在此环境中运行该功能(使用evalq):

input <- rnorm(10)
output <- rep(NA,10)

# create new environment
e1 <- new.env()

# run command in environment 'e1'
evalq(for(i in 1:10){
  index <- 1:i
  output[i] <- sum(input[index])^2
}, e1)

# assign value from 'output' in global environment
output <- get("output", e1)

变量i仅在环境e1中创建,而不是在全局环境中创建。

由于全球环境是e1的父级,因此您可以在input内访问outpute1