下面,我将以一种简单的方式来解释我所面临的问题。
我在两个文件中有两个R脚本-file1.R
和file2.R
。 file1.R
包含函数function1()
。
file2.R
中包含多个构造函数定义-constructor1(p1, p2)
,constructor2(p3, p4)
等。这些构造函数的实例用于{{1 }}。因此,我将function1()
作为file1.R
的第一行。
在source("file2.R")
中,file1.R
使用file2.R
中constructor2(p1 = rep(1,length(object1)), p2)
创建的object1。
function1()
的整体结构如下:
file1.R
file2.R的总体结构如下:
file1.R
如何在source("file2.R")
function1 <- function()
{
#Read data
data <- readData()
# Second parameter for this function is a instance of constructor1 that is present in file2.R
object1 <- somefunction1(data, listObject$constructor1)
# Second parameter for this function is a instance of a constructor2 that is present in file2.R
# Constructor 2 uses object1 as an input parameter (shown in file2.R)
object2 <- somefunction2(object1, listObject$constructor2)
}
之外定义# List object
listObject <- list()
#Instance of constructor 1
listObject$constructor1 <- constructor1(p1 = someValue, p2 = someValue)
#Instance of constructor 2
# This is where problem lies. How do I access object1 here?
listObject$constructor2 <- constructor2(p3 = rep(1,length(object1)), p4 = someValue)
的范围?我试图在R中使用getter和setter来实现此目的,但是却遇到object1
错误。我想这个错误的产生是因为我在function1()
中node stack overflow
之前source("file2.R")
和function1()
中file1.R
之前。如果没有这个,我会在R读取source("file1.R")
时收到一个file2.R
错误。
答案 0 :(得分:1)
该问题与object1
的范围无关,它与无限循环有关
source("function1.R") > source("function2.R") > source("function1.R") > etc
第一个示例重现该错误。
# file: function1.R
source("function2.R")
function1 <- function(){
object1 <- 1:10
function2(p1 = object1, p2 = 2)
}
# file: function2.R
source("function1.R")
function2 <- function(p1, p2){
p1 + p2
}
在干净的R会话中运行:
source("function1.R")
错误:节点堆栈溢出
现在从第二个文件function2.R中删除行source("function1.R")
。
# new file: function2.R
function2 <- function(p1, p2){
p1 + p2
}
再次在干净的R会话中运行:
source("function1.R")
function1()
#[1] 3 4 5 6 7 8 9 10 11 12
在function1
范围内创建的对象可以毫无问题地传递到function2
。