2017-12-14 11 views
-2

引数に応じて名前を作成する関数を作成したいと思います。 私が試した:R-変数の名前を作成する関数を作成する

a <- function(x){ assign(paste("train",x,sep=""),4]) } 

をしかし、私は、例えばa(3)を行うときに、何も起こりません。どうしましたか?

ありがとうございました。

編集:私はより具体的に要求されます。

私は機能の選択をしたい:機能は異なる機能のサブセットを生成し、各サブセットのトレーニングセットを生成し、次にこの機能の出力を別の機能で使用することです(lm各トレーニングセットをテストします。サブセット/訓練セットの数は可変であり、後でそれらを再使用するためにそれらをどのように格納するかわかりません。

+3

割り当てがグローバル環境で行われていません。 (どういう意味なのかわからない場合は 'assign'を使わないでください)。この質問にはユースケースが必要なので、より正確な方法を提案することができます。多くの "緩い"変数を作成することは、本当に悪い考えです。プログラマチックにそれらを管理するのに大変な時間が必要です。 –

答えて

-1

グローバル環境(または変数を使用する環境)内で変数を割り当てる必要があります。

> a <- function(x) { assign(paste('train', x, sep = ''), 4, envir = .GlobalEnv) } 
> ls() 
[1] "a" 
> a(1) 
> ls() 
[1] "a"  "train1" 
+3

はい、これはうまくいくので(+1)、おそらく@mobupu、あなたがしようとしていることは何でもやり方が間違っています。一般的には、関数内から地球環境に至るまで、 'assign'は避けてください。このようなことを行うためのRネイティブの方法が2つあり、この方法では読みにくいコードになり、バグが発生します。 – Aaron

+0

Rのネイティブな方法は何ですか?確かに私は自分自身の仕事で '割当て'を使わない。私はそれが読みにくいことに同意します。 – Max

+0

ユースケースが何であるかを知らなくても正確に言うのは難しいですが、おそらくリストを持つものです。ただ 'myvars < - list(); a - 関数(mylist、name、number){mylist [[name]] < - number; mylist} 'は可能性があります。 – Aaron

関連する問題