-2

1 つ以上の引数が関数内のループによって生成されたベクトルである関数を作成しています。
例:

 myfunc<-function(rep, n, arm1, arm2)
   {
   for(i in 1:rep)
    {
     x<-rnorm(n,0,4)
     y<-rnorm(n,0,5)
     res[i]<-t.test(arm1,arm2)
    }
   return(res)
   }

今、関数を次のように呼び出したいと思います

     myfunc(rep = 10, n=10, arm1 = x, arm2 = x) or
     myfunc(rep = 10, n=10, arm1=x,arm2 = y)

アイデアは、異なる腕を比較することです。

私の問題を明確に述べたことを願っています。

あなたの助けは非常に高く評価されています。

4

1 に答える 1

1

私がそれを手に入れたかどうか見てみましょう...

それぞれが正規確率変量repの 2 つのベッターを使用して、テストを実行する必要があります。nそして、引数を変更できるようにしたい... 率直に言って、これはプログラミングするための最良の方法ではありません.. しかし、私はあなたを助けようとします.

resまず最初に、変数を作成する前に、結果の任意の位置に代入することはできません。だから私はres <- list()あなたのコードに追加します。またt.test、より多くの情報を返すため、オブジェクトに追加する必要がありlist、二重角かっこで囲みます。

armここで、引数については、それがシンボル引数であり、関数の環境内で評価されることを R に理解させる必要があります。したがって、次を使用して式をキャプチャし、関数 substituteに渡す必要があります。eval

myfunc<-function(rep, n, arm1, arm2)  
{  
res <- list() ###  
for(i in 1:rep)  
{  
    x<-rnorm(n,0,4)  
    y<-rnorm(n,0,5)  
    res[[i]]<-t.test(eval(substitute(arm1)),eval(substitute(arm2))) ###  
}  
return(res)  
}

それを試してみてください...

これを行うより良い方法は次のとおりです。

newfunc <- function(rep, n, sd1, sd2)  
{  
lapply(1:rep, function(.) t.test(rnorm(n,0,sd1), rnorm(n,0,sd2)))  
}  

sd1とは標準偏差sd2パラメータです。

于 2013-03-14T13:28:06.917 に答える