将源代码移动到单独的文件会更改方法返回的值

时间:2017-04-10 17:35:36

标签: r r6

我正在编写一个非常长的类定义,并且我想从单独的文件中获取方法的代码。大多数情况下,这似乎有效,但我在尝试返回data.frame时遇到了一些奇怪的事情。当代码直接写在类定义中时,data.frame返回正常。在获取源时,返回的是长度为2的列表,其中第一个元素(名为var $ = require('jquery'); global.$ = global.jQuery = $; require('jquery-ui'); )包含data.frame,第二个元素(名为value)包含原子逻辑{ {1}}。 如何让方法只返回data.frame,同时将方法的代码留在单独的文件中?

这是主文件:

visible

以下是方法源文件:

TRUE

请注意,这两种方法的代码完全相同。代码可以是downloaded from github

1 个答案:

答案 0 :(得分:0)

作为MrFlick suggested,实现此目的的简单方法是定义一个函数,该函数执行您希望该方法执行的操作,然后将该方法定义为对该函数的调用,并传递所需的类成员实例作为参数。

功能定义:

#getFrame3.R
getFrame3 = function(Frame){
  MyData = Frame
  return(MyData)
}

主文件:

#MainScript3.R
library(R6)
source("getFrame3.R")

MyClass = R6Class(
  classname = "myclass",
  private = list(Frame = NA),
  public = list(
    initialize = function(){},
    setFrame = function(x){private$Frame = x},
    getFrame = function(){
      MyData = private$Frame
      return(MyData)
    },
    getFrame2 = function(){source("getFrame2.R", local = T)},
    getFrame3 = function(){return(getFrame3(private$Frame))}
  )
)

data1 = data.frame(v1 = rnorm(5,1,2), v2 = rnorm(5,1,2))

current = MyClass$new()
current$setFrame(data1)
current$getFrame() #works with code in the class definition
current$getFrame2() #doesn't work
current$getFrame3() #works with function call