是否可以在for循环中定义本地变量,以便无法在循环外访问它?在下面的简单示例中,我应该怎么做才能在循环外定义index
?
input<-rnorm(10)
output<-rep(NA,10)
for(i in 1:10){
index<-1:i
output[i]<-sum(input[index])^2
}
答案 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
内访问output
和e1
。