1

for ループに入るファイルの列数が異なるファイルリストがあります。時間変数 (列) が 800 を超え、入力ファイルの番号も出力リストの一部である各入力ファイルのサブセットを生成したいと考えています。

列番号 (6、7、8、または 9) が異なるため、以下のバージョンのコード (if ステートメント) を使用して、一度に 1 つのファイルのリストを出力することができました。しかし、ループしてファイル名を変更しようとすると、次のようになります。

Error in subset[[i]] : object of type 'closure' is not subsettable

for (i in 1:n)
    {currentfile<- filelist[i]
    a=read.csv(currentfile, header=F)
    b=a[3:1000]
    mat-as.matrix(b)
    mat2.df<-as.data.frame(mat2)
    if (ncol(mat2.df) == 6) subset6[[i]]<-subset[[i]](mat2.df, time>800)
    if (ncol(mat2.df) == 7) subset7[[i]]<-subset[[i]](mat2.df, time>800)
    if (ncol(mat2.df) == 8) subset8[[i]]<-subset[[i]](mat2.df, time>800)
    if (ncol(mat2.df) == 9) subset9[[i]]<-subset[[i]](mat2.df, time>800)'
}

アドバイスをよろしくお願いします!

4

2 に答える 2

0

エラー メッセージは、インデックス (「サブセット」) を関数 (「タイプ クロージャのオブジェクト」) に適用しようとしていることを示しています。

サブセット化しようとしている関数が呼び出されていることを考えると、エラー メッセージはもう少し混乱しますsubset

問題のある部分は次の部分です。 subset[[i]](mat2.df. . .

それらを括弧の最後に移動する[[i]]と、問題ありません。

   subset(mat2.df, time>800)[[i]]

その問題とは別に、forループを再検討することをお勧めします。
たとえば、これらの行の背後にある動機は何ですか? そして、彼らは意図した目的を達成していますか?

     mat - as.matrix(b)
     mat2.df <- as.data.frame(mat2)
于 2013-05-02T03:26:52.083 に答える