R语言中变量的冲突

Pab*_*ori 2 scope r

我有一个R的脚本,它采用R的其他脚本并以这种方式操作它们,并执行它们的代码.我的脚本使用了一些变量(显然),当其他脚本使用公共变量名时,我就搞得一团糟.我希望我能像胶囊一样执行其他脚本,这样重合的变量不会相互影响.

我一直在阅读有关环境的文章,并进行了大量试验,但我没有发现它们的真正含义.

例:

script1.txt
___________
i=sample(10:20,1)

script2.txt
___________
i=sample(10:20,1) 

myscript.txt
___________
other.script = c("script1.txt", "script2.txt")
for( i in 1:2 ) {
    source(other.script[i])
}
i==2
Run Code Online (Sandbox Code Playgroud)

我希望每个变量"i"在不影响其他变量的情况下履行其职责(特别是myscript中的变量,我不关心其他变量).

Pau*_*tra 6

处理此问题的最佳方法是创建一组功能,以削减脚本捕获的功能.每个函数都在自己的环境中执行,防止变量以彼此的方式进入.理想情况下,功能不应太长,例如10-20行或代码.比调用这些函数完成任务更大的脚本.如果您正确执行此操作,您的脚本可以简短而重要.我通常将这些函数存储在一个或多个脚本文件中,准备source由需要它们的脚本编写.你甚至可以将它们包装在一个包中.

您想要订购脚本的方式,所有变量都是全局的,即可在整个程序中访问.一般来说,应该像瘟疫一样避免全局变量.这正是因为您的问题所关注的问题:如何防止变量相互干扰.就像我说的,抽象到函数或对象是阻止这种情况发生的方法.有关全局变量等的更多信息可以在那里找到:


nog*_*pes 5

你在找sys.source.您处于正确的轨道上,您需要创建一个environment然后在该环境中运行脚本.

other.script = c("script1.txt", "script2.txt")
for( i in 1:2 ) {
  env<-new.env(parent = baseenv())
  sys.source(other.script[i],env)
  print(get('i',env)) # prints the value of i
}
i==2 # TRUE
Run Code Online (Sandbox Code Playgroud)