2016-09-26 13 views
0

関数の中で行列を作成する方法を知っている人はいますか?後でそれを外部で使うことはできますか?私は引数に使用する名前を行列に入れたい。これは、これまでの私のコードです:R:関数入力名で行列を作成しますか?

newacc <- function(accname){ 
    accname <<- matrix(data=0, nrow=1, ncol=2) 
    colnames(accname) <- c("DEBIT", "CREDIT") 
    return(accname) 
    } 

は、だから、私は、引数accnameのために与える入力は、関数の外で作成された行列の名前になりたいです。現在、私は入力accname = accnameを与える場合、私は関数の外に行列を作成することができます。

私は助け:)

はありがとうのいずれかの種類のために非常に感謝される

+0

))、 envir = parent.frame()) '関数内 – akrun

+1

異なる環境に依存するオブジェクトを持つのは間違っている –

+0

既に行列を' return'しています。関数名をつけることについて)。 'accname < - newacc()' ...あなたの関数は 'newacc = function(){m < - matrix(data = 0、nrow = 1、ncol = 2);}に単純化されます。 colnames(m)< - c( "DEBIT"、 "CREDIT"); return(m)} ' – Gregor

答えて

0

あなたが機能環境の中に変数名を割り当てることを期待している理由について、いくつかのコンテキストを提供するのに有用であるかもしれないので、そこに採用する別の戦略かもしれない。

標準的な割り当て構造を避けることを主に試みている場合、異なる環境に依存するオブジェクトを必要としない代替方法があります。

代わりの

accname <- newacc(accname) 

あなたがそうのように)割り当てを(使用することができます。

assign("accname", newacc(accname)) 

EDIT:

私はこの間違ったを読んだかもしれないが、私は必ずことを確認したいです関数の内部に変数の名前が何であるかは重要ではないことを知ってください。同じ関数を再使用したいが、出力変数名に異なる名前を付ける場合は、関数を呼び出すときに行うことです。

新しいRセッションで次のコードを実行して、これが探している機能のタイプかどうかお知らせください。あなたが返す行列が関数内でaccと呼ばれていることに注目してください。しかし実際に関数を呼び出すときには、関数に返す関数を指定したものだけが新しい変数になります。もし `assign`すなわち`割り当てる(accname、値=マトリックス(データ= 0、nrow = 1、のNcoI = 2、dimnames =リスト(NULL、C( "デビット"、 "クレジット")必要があるかもしれない

newacc <- function(x){ 
    acc <- matrix(data=x, nrow=1, ncol=2) 
    colnames(acc) <- c("DEBIT", "CREDIT") 
    return(acc) 
} 

accname <- newacc(0) 

accname2 <- newacc(10) 

accname3 <- newacc(20) 
+0

ありがとうございました! 私は簡単な帳簿ツールを書いてみたいです。ユーザは、デビットとクレジットの列を使用して新しいt-口座を開くためにnewacc(資産)を書くことができるはずです。問題は、グローバル環境で作成された行列は、関数内で変数として与えられた名前を持つ必要があるということです。 – cholz

+0

それでは、入力変数を行列で上書きすることを考えていますか? – jmartindill

+0

多かれ少なかれ。または、入力変数の名前を持つ行列を作成する。 – cholz

関連する問題