1

R の異なるグループの列平均を計算しようとしました。グループを割り当てる方法がいくつか存在するため、異なるグループを含む 2 つの列が作成されました。

    # create a test df
    df.abcd.2<-data.frame(Grouping1=c("a","f","a","d","d","f","a"),Grouping2=c("y","y","z","z","x","x","q"),Var1=sample(1:7),Var2=sample(1:7),Var3=rnorm(1:7))
    df.abcd.2

ここで、結果を取得して別の dfs に保存するために、assign、lapply、split、および colMeans を使用してループを作成しました。ループは正常に動作します。

   #Loop to create the colmeans and store them in dataframes
    for (i in 1:2){
      nam <- paste("RRRRRR",deparse(i), sep=".")
      assign(nam, as.data.frame(
        lapply(
          split(df.abcd.2[,3:5], df.abcd.2[,i]), colMeans)
      )
      )
    }

そこで、このメソッドを異なるデータフレームに適用する関数を作成したいと思います。私の試みは次のようになりました:

    # 1. function to calculate colMeans for diffrent groups
    # df= desired datatframe, 
    # a=starting column: beginning of the columns that contain the groups, b= end of columns that contain the groups
    # c=startinc column: beginning of columns to be analized, d=end of columns do be analized

    function.split.colMeans<-function(df,a,b,c,d)
    {for (i in a:b){
      nam <- paste("OOOOO",deparse(i), sep=".")
      assign(nam, as.data.frame(
        lapply(
          split(df[,c:d], df[,i]), colMeans)
      )
      )
    }
    }
    #test the function
    function.split.colMeans(df.abcd.2,1,2,3,5)

したがって、この関数をテストすると、エラーメッセージも結果も得られません...誰か助けてください。

4

1 に答える 1

1

それは完全に機能しています。assign のヘルプを参照してください。フレームと環境について学びます。

ls()つまり、関数内で変数を作成しますが、コマンド ラインで実行するときに表示される環境に変数が漏れることはありません。関数ループ内に配置すると表示さprint(ls())れますが、関数が終了すると消えます。

通常、関数が呼び出し環境と対話する唯一の方法は、戻り値によるものです。他の方法は、痛みの全世界に入ることです。

assign を使用して、連続した名前または有益な名前を持つものを作成しないでください。これまで。自分が何をしているのか、何をしているのかを知らない限り... それらをリストに貼り付けてから、ループなどのためにパーツにインデックスを付けることができます。

于 2013-01-16T11:54:06.243 に答える