2017-06-07 12 views
0

私は単純なカスタム関数のカップルを1つの特定の関数で統合するために書いています。引数が欠落していますが、デフォルトはありませんが、ループ内にのみあります

これらはデータのサブセットに使用されます。最初はあまり具体的である:

x$COL3
unspecific_subsetting=function(x,var1,var2){ 
    subset(x, x$COL1 %in% var1 
     & x$COL2 %in% var2 
     & x$COL3 %in% "A") 
} 

それが一定であるため、私は"A"を置きます。私は(year+1)を書いたが、後に私もそれを変数に変更する場合があります

specific_subsetting=function(x,var1,var2,year){ 
    subset(x, x$COL1 %in% var1 
     & x$COL2 %in% var2 
     & x$COL3 %in% "A" 
     & x$COL4 %in% (year+1)) 
} 

:第二に、それはまったく同じことを行いますが、それは唯一選ばれた行をサブセット、より具体的です。私が使用する最後の関数は、単純なパーセント変化である:

pcchange=function(x){ c(NA, diff(x)/x[-length(x)]) } 

だから、この時点でそれを説明する程度の時間である - 私は、特定の引き算データセットの百分率変化を計算し、1つの便利な機能、にすべてのこれらの機能を組み合わせることを希望します選択された行からpcchange値を返します。計算し、その後、それは基本的にデータの特定の部分をサブセットとDFと、そして最終的に目的の行を返すためにpcchangesに新しい列が追加されます -

big_function=function(x,var1,var2,year){ 
    x=unspecific_subsetting(x, var1, var2) 
    x=data.frame(x,"growth"=(pcchange(x$COLn)*100)) 
    x=getforecast(x,var1,var2,year)} 

は、より具体的に:それはこのようになります。この関数は動作します。そして、魅力のように働く。問題は私がループに入れたときに始まります。それは次のようになりますので、これまでのところ、私はリストに基づいてループを書く:

for (i in 1:length(df.names.list)){ 
assign(NEW.df.names.list[i],big_function(get(df.names.list[i])),var1,var2,year.list[i])} 

だから、あなたは、私が唯一の選択された行を構成する各1で新しいDFSを作成しようとしています見ることができるように(ところで:私は私の「サブセット」承知しています関数は​​に重複しますが、私は気にしません)。そして、これは私にエラーを返します:

私がチェック
Error in unspecific_subsetting(x, var1, var2) : 
    argument "var1" is missing, with no default 

は、この問題はすべての関数内のすべての単一の引数を検討し、それだけで最初の1つのRがつまずいた返さ。 文字通り、ここで何が問題なのか、私は同じようなループカップルを使用し、このような結果は得られませんでした。

+0

いくつかのデータを提供できますか? – Consistency

+0

最初に確認する:エラーが発生したときに、あなたは 'var1'に何を持っていますか? – lbusett

+0

私はポストを書くのを簡単にするために「あなたの質問に答える」を使用します。 – Alexandros

答えて

0

テストデータのエラーを再現することができました。私のテストは、DFのようになります。

COL1 COL2  COL3 COL4 COLn 
CarBrand1 Gas  A 2014 5.34 
CarBrand1 Gas  A 2010 1.46 
CarBrand1 Gas  A 2007 1.18 
CarBrand1 Diesel  A 2006 1.27 
CarBrand1 Electric A 2013 1.78 
CarBrand1 Electric A 2001 1.44 
CarBrand2 Electric A 2007 1.39 
CarBrand2 Diesel  A 2004 1.04 
CarBrand2 Gas   A 2009 1.89 
CarBrand2 Gas   A 2004 1.83 
CarBrand2 Electric A 2000 1.69 
CarBrand2 Electric A 2001 1.61 
CarBrand2 Electric A 2013 1.29 
CarBrand2 Diesel  A 2001 2.00 
CarBrand2 Diesel  A 2006 1.78 
CarBrand2 Gas   A 2010 1.10 
CarBrand2 Gas   A 2002 1.51 
CarBrand2 Gas   A 2012 1.78 
CarBrand2 Electric A 2009 1.84 
CarBrand3 Gas   A 2013 1.24 
CarBrand3 Gas   A 2009 1.98 
CarBrand3 Gas   A 2015 1.91 
CarBrand3 Gas   A 2007 1.14 
CarBrand3 Diesel  A 2000 1.54 
CarBrand3 Diesel  A 2013 1.60 

最初の2列は、車のブランドとエンジンタイプあり、第三は、いくつかの一定の第四年ですし、最後には、いくつかのランダムな値です。私は私のテストコードは次のようになりますので、正確に最初のポストのようにRに私のカスタム関数を置く:私は、複数のDFSで作業

newdf=0 
output=0 
NEW.df.names.list=c("output") 
df.names.list=c("mydf") 
year.list=2012 
for (i in 1:length(df.names.list)){ 
    assign(NEW.df.names.list[i],big_function(get(df.names.list[i])),"CarBrand3","Diesel",year.list[i])} 

、これが唯一のループになりますが、それは私にまったく同じエラーになります。私はこれが正確に私の自身の質問に答えているわけではないことを知っています。その延長のようなものです...

関連する問題