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。
這是不是真的怎麼'源()'是爲了使用。如果您當前的工作目錄與這兩個文件所在的位置不同,這也會變得非常複雜。而是考慮在R中製作一個合適的包,以便在多個文件中分發相關的代碼。或者至少在你正在尋找的文件中放置適當的函數,並將它們放在文件的頂部,並將它們作爲適當的對象用在你的代碼中。 – MrFlick
此外,'return'僅用於在函數結束時返回 - 在源文件的頂層使用它是沒有意義的。 – Dason
@MrFlick - 如果這些函數的目的是成爲引用私有和自己成員以及類實例方法的方法,那麼這種方法是行得通的嗎? –