2014-01-28 149 views
0

是否可以在for循环中定义一个局部变量,以便它不能在循环之外访问?在下面的简单示例中,我该怎么做才能使index不在循环外部定义?for循环内的局部变量?

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

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

它离开循环后它是空的吗? – Mike

+1

要完全删除它,你可以使用'rm(index)'作为最后一步。 – josliber

+0

为什么你想这样做? – Fernando

回答

7

假设这只是一个玩具例子,你的真实情况比较复杂,你可以换for循环中local一个电话,改变作用output<<-赋值运算符。

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

简短的回答是否定的。

你可以NULL使用或删除后的变量,如注释中所建议的,但如果你想要做的是封装一个特定的循环正在做什么,最好的做法是把它放入一个函数。这样你可以确保变量的范围是正确的,并且你不依赖自己记住变量或删除它。

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的母公司,因此您可以在e1内访问inputoutput

+0

它不是那么简单:) – DatamineR

+0

@RStudent请参阅更新以获取完全不同的方法。 –