2012-04-20 32 views
0

おそらく愚かな質問ですが、私はどこにでも答えを見つけることができません。私は2つの引数を持つ関数を作成しようとしています。これらはベクトルです(x = c(a、b、c)、y = c(50,75,100)など)。これらのすべての組み合わせを計算し、引数を出力名の一部として使用する関数を記述します。例えば。出力名の一部としての関数の引数

関数(x、y)は
DF $ output_a_50 = * 2 + 50^2
DF $ output_a_75 = * 2 + 75^2 .....

任意の提案であろうありがとう:)

+2

は二つの質問しているように見える:あなたはexpand.grid()(スロー解決につながる)、または外側のいずれかを必要とするすべての組み合わせを取得するために()であれば、私の意見では最高の選択肢は、リストを渡すことですあなたはベクトル化することができます。次に、他のビットは名前を作成しています:外部(x、y、function(foo、bar)paste( "output"、foo、bar、sep = "_") df)< - xyz返す前に – mweylandt

+0

私は名前の構築に関する部分にしか興味がありません:) –

+0

1つの問題は、y = c(a、b、c)が名前を失うということです。 yのどのビットがa、b、cであるか関数はどのように動くでしょうか?おそらく、foo = function(yvalues、...)を実行し、他の変数を...リストから取得するほうがよいでしょう。私は本当にトリッキーなことをせずに、あなたが名前を得ることができるとは確信していませんが。あなたの問題はまた、 'a'は関数環境にないということです。私はおそらくあなたがおそらく完全に間違った方法でこの問題に近づいていると思います... – Spacedman

答えて

2

あなたの問題は、あなたの関数にc(a, b, c)を渡すと、名前が失われるということです。

foo <- function(x, y) { 
    df <- list() 
    for (xx in names(x)) { 
     for (yy in y) { 
     varname <- paste("output", xx, yy, sep = "_") 
     df[[varname]] <- x[[xx]]*2 + yy^2 
     } 
    } 
    df 
} 

foo(x = list(a = NA, b = 1, c = 2:3), 
    y = c(50, 75, 100)) 

# $output_a_50 
# [1] NA 
# 
# $output_a_75 
# [1] NA 
# 
# $output_a_100 
# [1] NA 
# 
# $output_b_50 
# [1] 2502 
# 
# $output_b_75 
# [1] 5627 
# 
# $output_b_100 
# [1] 10002 
# 
# $output_c_50 
# [1] 2504 2506 
# 
# $output_c_75 
# [1] 5629 5631 
# 
# $output_c_100 
# [1] 10004 10006 
関連する問題