少し異なる関数を作成したいと思いますが、それぞれがグローバル変数を受け入れることができます。assignを使用して関数内に複数の関数を作成するR
this_value
には、this_key
という名前の関数を割り当てるためにassign
を使用します。作成する必要がある3つの機能は、func_a
,func_b
、およびfunc_c
です。
新たに作成された各関数は、入力をx
とし、その関数に特有の何かをx
にする必要があります。この場合、「key_name:name
----- value_x:x
」と印刷します。したがって、name
は、機能がfunc_a
,func_b
、またはfunc_c
のいずれであるかによって異なります。たとえば、func_a
を呼び出すと、「key_name:a」と表示されます。
to_name <- c("a", "b", "c")
create_funcs <- function() {
all_funcs <- list()
for (name in to_name) {
this_key <- paste0("func_", name)
this_value <<- function(x) {
paste0("key_name: ", name, " ----- value_x: ", x)
}
assign(this_key, this_value, envir = .GlobalEnv)
all_funcs <- c(all_funcs, this_key)
}
return(all_funcs)
}
create_funcs()
ただし、関数を作成した後、それらは、それぞれベクターのみto_name
に「C」、または最後の値のname
を返します。
func_a("foo") # key_name: c ----- value_x: foo
func_b("bar") # key_name: c ----- value_x: bar
代わりに、func_a("foo")
は ":A ----- value_x:FOOたキー名" を返す必要があります。何が価値があるために
、これは同様のオブジェクトに割り当てる機能で動作します。
create_objects <- function() {
all_objs <- list()
for (name in to_name) {
this_key <- paste0("key_", name)
this_value <- paste0("value_", name)
assign(this_key, this_value, envir = .GlobalEnv)
all_objs <- c(all_objs, this_key)
}
return(all_objs)
}
create_objects()
例:外観を取るための
key_a # value_a
ありがとう!
私は依然としてforループ内で代入を行いたいので、関数の外にそれぞれの関数の名前を付ける必要はありません。この 'all_funcs < - c(all_funcs、partial(func_、name = name、envir = .GlobalEnv))'のようなものは、上記と同じ結果を返します( 'func_a(" foo ")#key_name:c---- - value_x:foo') – amanda
@amandaこのような複数の関数をループで作成する例を追加する答えを編集しました。役に立つと助かります – austensen
完璧、おかげでトン。私が "ぷるる"列車に乗るほうがいいと思うよ! – amanda