2016-09-23 15 views
-2

私は1人あたり複数の行を持つ複雑な行列を持っています。私は個人ごとに異なる変数を要約するスクリプトを作成します。これを行うために、まず、新しい要約変数を含むリストを作成します。私は、次のようなclases場合は導入する必要があり、これらの変数の一部を取得するために:しかし、私はこのスクリプトを実行して行うときifステートメントの問題

this_iids_roh <- dat[class,] 
my_list<-c("Froh"=(sum(this_iids_roh$KB)/2881033), 
     "chr1"= if (this_iids_roh$CHR==1) {(sum(this_iids_roh$KB)/247249.719)*100}, 
     "chr2"= if (this_iids_roh$CHR==2) {(sum(this_iids_roh$KB)/242193.529)*100}, 
     "chr3"= if (this_iids_roh$CHR==3) {(sum(this_iids_roh$KB)/198295.559)*100}) 
return(my_list) 

を(これは単なる小さな部分である)私は唯一の「FROH」と「CHR 1を取得します変数。私はいくつかのことを試みましたが、 "chr1"の後に他の変数を得ることができません。 私を助けてくれることを願っています!

+1

with() [MCVE]読んで、あなたの質問を編集してください! – jogo

+0

誰かがこの質問が否定的な票にふさわしい理由を私に説明することはできますか? – Cebs

+0

最初に:**私は** downvotersの1つではありません。あなたの質問は[ask]と[mcve]の条件を尊重しないようです。あなたは遊ぶためのデータを与えなかった。あなたは望みの結果を出していませんでした。あなたのコードは一貫していません(関数定義からreturn(..)と孤独な '}'があります)。 – jogo

答えて

1

代わりに条件を使用すると、条件を直接使用してデータをサブセット化できます。

this_iids_roh <- NULL 
this_iids_roh$CHR = rep(c(1,2,3),10) 
this_iids_roh$KB = runif(30)*100000 
this_iids_roh = as.data.frame(this_iids_roh) 

これを行う方法は、この問題を解決

my_list<-c("Froh"=(sum(this_iids_roh$KB)/2881033), 
     "chr1"= {(sum(this_iids_roh$KB[this_iids_roh$CHR==1])/247249.719)*100}, 
     "chr2"= {(sum(this_iids_roh$KB[this_iids_roh$CHR==2])/242193.529)*100}, 
     "chr3"= {(sum(this_iids_roh$KB[this_iids_roh$CHR==3])/198295.559)*100}) 
> my_list 
    Froh  chr1  chr2  chr3 
0.60958 203.99334 251.06703 324.65984 

希望です。条件は上の角括弧の中に書かれていることに注意してください。


alternativly

my_list<-c(Froh= sum(this_iids_roh$KB)/2881033, 
      chr1= sum(this_iids_roh$KB[this_iids_roh$CHR==1])/2472.49719, 
      chr2= sum(this_iids_roh$KB[this_iids_roh$CHR==2])/2421.93529, 
      chr3= sum(this_iids_roh$KB[this_iids_roh$CHR==3])/1982.95559) 
my_list 

も細かいと

my_list <- with(this_iids_roh, c(Froh= sum(KB)/2881033, 
      chr1= sum(KB[CHR==1])/2472.49719, 
      chr2= sum(KB[CHR==2])/2421.93529, 
      chr3= sum(KB[CHR==3])/1982.95559)) 
my_list 
+0

中括弧はどうなっていますか?これは、Rの中括弧がセミコロンまたは改行で区切られた*文をグループ化するために使用される最小の中カッコであると言っても差し支えありません。 –

+0

私は自分のコードを最小限に編集しようとしていました。中カッコは出力に影響を与えずに削除できます。 – 9Heads

+0

ありがとう、それは働いた、私はカールブレースなしで試して、動作しなかったので、私は戻ってきました。今すぐ中括弧でそれは働いた – Cebs