かなり単純な質問ですが、私のRの知識はあまり良くありません。
序章
私はパッケージSurvdiffを使用しています。一度使用するのは問題ありませんが、多くの変数をループさせたいと思います。
例:177個の観測値を持つ43000個の変数のdata.frameがあります。data.frameにも3つの初期変数があります。1つ目は単なるID番号、2つ目は「時間」、3つ目は「cens」です。Survdiffパッケージには、時間と費用の両方が必要です。しかし、これから、data.frame内の残りの変数、つまりGenedata [、4:43000]をループする必要があることがわかります。
これまでに行ったことは、通常はforステートメントを使用しますが、Rでは、これがapplyステートメントよりもはるかに遅い可能性があることを認識しています。
cols <- as.list( names(Genedata) ) #generate a list of column numbers
Geneset <- lapply(cols , function (x) { survdiff( Surv( Genedata$time, Genedata$cens=="1" ) ~ x , data = Genedata )$chisq } )
ただし、エラーが発生します
"Error in model.frame.default(formula = Surv(Genedata$time, Genedata$cens == :
variable lengths differ (found for 'x')"
データのサンプル(最初の15行8列)-注:ヘッダーがオーバーフローしました
Accession time cens A1BG.229819_at A1BG_AS1.232462_s_at A1CF.220951_s_at A1CF.241547_at A2LD1.232422_at
1 120 0 0 0 0 0 1
2 120 0 0 0 0 0 1
3 28.96 NA 1 0 0 0 1
4 119.21 0 0 0 0 0 1
5 59.53 0 0 1 0 0 1
6 68.81 1 0 0 0 0 1
7 82.29 0 0 0 0 0 1
8 110.82 0 0 0 0 0 1
9 65.88 NA 1 0 0 0 1
10 84.13 0 0 0 0 0 1
11 16.47 NA 0 0 0 0 1
12 89.75 0 0 0 1 1 1
13 76.07 0 0 0 0 0 1
14 67.82 0 0 0 0 0 1
問題
- 関数がより複雑なため、この状況で「apply」を適切に使用する方法がわかりません。
Update1
FUN = function(x)....に変更されました。エラーはなくなりました。代わりに私は得る
dim(X) must have a positive length
それでも、dim(GeneMatrix)は正の値を返します。
Update2
さらに微調整した後、コードを更新しました