2017-04-10 56 views
0

我正在寫一個類定義,將會非常長,我想從單獨的文件中獲取方法的代碼。大多數情況下,這似乎有效,但在嘗試返回data.frame時遇到了一些奇怪的事情。當代碼直接寫入類定義時,data.frame會正常返回。當它來源時,返回的是長度爲2的列表,其中第一個元素(名爲value)包含data.frame,第二個元素(名爲visible)包含原子邏輯TRUE如何讓方法只返回data.frame,而將方法的代碼留在單獨的文件中?移動源代碼到一個單獨的文件改變了方法返回的值

這裏是主文件:

#MainScript.R 
library(R6) 

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)} 
) 
) 


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

current = MyClass$new() 
current$setFrame(data1) 
current$getFrame() 
current$getFrame2() 

下面是該方法的源文件:

#getFrame2.R 

MyData = private$Frame 
return(MyData) 

注意,對於這兩種方法的代碼是完全一樣的。代碼可以是downloaded from github

+2

這是不是真的怎麼'源()'是爲了使用。如果您當前的工作目錄與這兩個文件所在的位置不同,這也會變得非常複雜。而是考慮在R中製作一個合適的包,以便在多個文件中分發相關的代碼。或者至少在你正在尋找的文件中放置適當的函數,並將它們放在文件的頂部,並將它們作爲適當的對象用在你的代碼中。 – MrFlick

+0

此外,'return'僅用於在函數結束時返回 - 在源文件的頂層使用它是沒有意義的。 – Dason

+0

@MrFlick - 如果這些函數的目的是成爲引用私有和自己成員以及類實例方法的方法,那麼這種方法是行得通的嗎? –

回答

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 
相關問題