非常に長いクラス定義を作成しています。別のファイルからメソッドのコードをソースにしたいと思います。ほとんどの場合、うまくいくようですが、data.frameを返そうとすると何か不思議なことに遭遇しました。コードがクラス定義に直接書き込まれると、data.frameは正常に戻ります。それがソースである場合、返されるのは長さ2のリストで、最初の要素(value
)にはdata.frameが含まれ、2番目の要素(visible
)にはアトミック論理TRUE
が含まれます。 メソッドのコードを別のファイルに残したまま、data.frameだけを返すメソッドを取得するにはどうすればよいですか?ここソースコードを別のファイルに移動すると、メソッドによって返された値が変更されます
メインファイルである:
#getFrame2.R
MyData = private$Frame
return(MyData)
注二つの方法のためのコードはまったく同じであること:ここ
#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()
方法ソースファイルです。コードはdownloaded from githubです。
これは、 'ソースは()'使用されることを意味しているか、実際にはありません。現在の作業ディレクトリがこれらの2つのファイルが置かれている場所と異なる場合、これも非常に複雑になります。代わりに、複数のファイルに関連するコードを配布するために、Rで適切なパッケージを作成してください。または、少なくとも、ソースとなるファイルに適切な関数を置き、ファイルの先頭にソースを入れて、コード内で適切なオブジェクトとして使用します。 – MrFlick
また、 'return'は関数の最後に戻るために使われることを意図しています。ソースファイルのトップレベルでそれを使うのは意味がありません。 – Dason
@MrFlick - 関数が、クラスインスタンスのプライベートメンバーと自己メンバーとメソッドを参照するメソッドであることを意図している場合は動作しますか? –