是否可以在for循环中定义一个局部变量,以便它不能在循环之外访问?在下面的简单示例中,我该怎么做才能使index
不在循环外部定义?for循环内的局部变量?
input<-rnorm(10)
output<-rep(NA,10)
for(i in 1:10){
index<-1:i
output[i]<-sum(input[index])^2
}
是否可以在for循环中定义一个局部变量,以便它不能在循环之外访问?在下面的简单示例中,我该怎么做才能使index
不在循环外部定义?for循环内的局部变量?
input<-rnorm(10)
output<-rep(NA,10)
for(i in 1:10){
index<-1:i
output[i]<-sum(input[index])^2
}
假设这只是一个玩具例子,你的真实情况比较复杂,你可以换for循环中local
一个电话,改变作用output
到<<-
赋值运算符。
local(
for(i in 1:10){
index<-1:i
output[i] <<- sum(input[index])^2
}
)
简短的回答是否定的。
你可以NULL
使用或删除后的变量,如注释中所建议的,但如果你想要做的是封装一个特定的循环正在做什么,最好的做法是把它放入一个函数。这样你可以确保变量的范围是正确的,并且你不依赖自己记住变量或删除它。
您可以在新的环境中运行的代码,并在此环境中运行的功能(与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
内访问input
和output
。
它不是那么简单:) – DatamineR
@RStudent请参阅更新以获取完全不同的方法。 –
它离开循环后它是空的吗? – Mike
要完全删除它,你可以使用'rm(index)'作为最后一步。 – josliber
为什么你想这样做? – Fernando