0

以下は、次のエラーを生成するAデータフレームとA関数の再現です。

Error in Ops.data.frame(sF1(x1, x2, x3, x4), sF1(x1, x2, 0, x4)) (from #2) : 
          - only defined for equally-sized data frames"

データフレーム

S <- rep(c(1,2), each=1536)
D <- rep(c(0,2,4,6,8,10,15,20,30,40,45,50,55,60,65,70,80,85,90,92,94,96,98,100), each=16,times=16)
K <- rep(c("K", "Y","M","C"), each= 384, times=4)
I <- rep(c("A", "S"), each=3072)
Data <- rnorm(6144)
DataFrame <- cbind.data.frame(S,D,K,I,Data)

それぞれ同じ4つの引数を持つ2つの関数を作成しました

sF1 <-  function(x1,x2,x3,x4) subset(DataFrame, I == x1 & K == x2 & D == x3 & S==x4, select = "Data")

sF2 <- function(x1,x2,x3,x4){
    (100* (1-10^-(sF1(x1,x2,x3,x4) - sF1(x1,x2,0,x4))) /
     (1-10^-(sF1(x1,x2,100,x4)- sF1(x1,x2,0,x4)))) - x3}

関数「sF1」は問題なく実行されます

sF1(I,K,D,S)

2番目の関数で「sF2」は上記のエラーを生成します

sF2(I,K,D,S)

以下は、「sF2」コンポーネントの内訳です。

  • sF1(x1、x2、x3、x4)には5632行あります
  • sF1(x1、x2,0、x4)には256行あり、22回リサイクルされると思います。
  • sF1(x1、x2,100、x4)にも256行あり、22回リサイクルされると思います。

エラーはリサイクルの欠如によるものだと思います。データフレームを別の方法でフォーマットする必要がありますか?関数「sF2」を書き直す必要がありますか?私は一日中ウィールを回転させてきましたが、成功しませんでした。このエラーの修正にご協力ください。

前もって感謝します

4

1 に答える 1

2

subsetプログラムでの使用は推奨されません。代わりに使用[します。

そうは言っても、data.frameから単一の列を返したい場合、data.frameクラスを保持しない場合(サブセットが保持する、または保持[..., ,drop = FALSE]する場合、リサイクルは期待どおりに機能します。

私はあなたが本当にしたいのか==、そうでないのI%in%(unique(x1)か、似ているのかはっきりしていません(しかし、それは演習として残します

あなたは再定義することができます

sF1 <-  function(x1,x2,x3,x4) with(DataFrame, Data[I == x1 & K == x2 & D == x3 & S==x4])

リサイクルするベクトルを返します

于 2013-03-15T00:56:19.570 に答える