-1

データ内の列 Lair かどうかをチェックするものを作成する方法を考えていました

特定のしきい値を下回ったり上回ったりすると、0.5 未満は LOH と呼ばれ、0.5 を超えると不均衡と呼ばれます。そのため、LOH と INBALANCE の呼び出しは新しい列に書き込む必要があります。以下のコードのようなものを試しました。

detection<-function(assay,method,thres){
  if(method=="threshold"){
    idx<-ifelse(segmenten["intensity"]<1.1000000 & segmenten["intensity"]>0.900000 & segmenten["Lair"]>thres,TRUE,FALSE)
  }
  if(method=="cnloh"){
    idx<-ifelse(segmenten["intensity"]<1.1000000 & segmenten["intensity"]>0.900000 & segmenten["Lair"]<thres,TRUE,FALSE)
  }
  if(method=="gain"){
    idx<-ifelse(segmenten["intensity"]>1.1000000 & segmenten["Lair"]<thres,TRUE,FALSE)
  }
  if(method=="loss"){
    idx<-ifelse(segmenten["intensity"]<0.900000 & segmenten["Lair"]<thres,TRUE,FALSE)
  }
  if(method=="bloss"){
    idx<-ifelse(segmenten["intensity"]<0.900000 & segmenten["Lair"]>thres,TRUE,FALSE)
  }
  if(method=="bgain"){
    idx<-ifelse(segmenten["intensity"]>1.100000 & segmenten["Lair"]>thres,TRUE,FALSE)
  }
  return(idx)
}

この部分の後、次のステップは、関数から既存のテーブルにデータを書き込むことです。アイデアは誰にでもある

4

1 に答える 1

1

あなたの望む結果は十分に明確ではないので、私はいくつかの仮定を立て、有用かどうかを書きました.

まず、関数内に定義されていないオブジェクト segmenten があります。これは入力として提供されたデータ セットだと思います。次に、ifelse を使用し、返される結果はTRUEorですが、いくつかの条件が満たされたときにorFALSEが必要です。LOHINBALANCE

必要なINBALANCE場合... & segmenten["Lair"]>thresLOHそうでない場合(ここ...では条件の他の部分を意味します)、これによりベクトルが得られますが、メインデータセットに追加の列としてそれが必要ですよね?したがって、これはコードを改善するための新しい出発点になる可能性があります。

detection <- function(assay, method=c('threshold', 'cnloh', 'gain', 'loss', 'bloss', 'bgain'),
                    thres=0.5){
  x <- assay
  idx <- switch(match.arg(method),
         threshold = ifelse(x["intensity"]<1.1 & x["intensity"]>0.9 & x["Lair"]>thres, 'INBALANCE', 'LOH'),
         cnloh     = ifelse(x["intensity"]<1.1 & x["intensity"]>0.9 & x["Lair"]<thres, 'LOH', 'INBALANCE'),
         gain      = ifelse(x["intensity"]>1.1 & x["Lair"]<thres, 'LOH', 'INBALANCE'),
         loss      = ifelse(x["intensity"]<0.9 & x["Lair"]<thres,'LOH', 'INBALANCE'),
         bloss     = ifelse(x["intensity"]<0.9 & x["Lair"]>thres, 'INBALANCE', 'LOH'),
         bgain     = ifelse(x["intensity"]>1.1 & x["Lair"]>thres, 'INBALANCE', 'LOH'))

  colnames(idx) <- 'Checking'
  return(cbind(x, as.data.frame(idx)))
  }

例:

Data <- read.csv("japansegment data.csv", header=T)

result <- detection(Data, method='threshold', thres=0.5) # 'threshold' is the default value for method
head(result)
       SNP_NAME x0 x1 y pos.start   pos.end chrom count copynumber intensity allele.B   Lair uncertain sample_id
1 SNP_A-1656705  0  0 0    836727  27933161     1   230          2    1.0783        1 0.9218     FALSE GSM288035
2 SNP_A-1677548  0  0 0  28244579 246860994     1  4408          2    0.9827        1 0.9236     FALSE GSM288035
3 SNP_A-1669537  0  0 0    100819 159783145     2  3480          2    0.9806        1 0.9193     FALSE GSM288035
4 SNP_A-1758569  0  0 0 159783255 159791136     2     5          2    1.7244        1 0.9665     FALSE GSM288035
5 SNP_A-1662168  0  0 0 159817465 168664268     2   250          2    0.9786        1 0.9197     FALSE GSM288035
6 SNP_A-1723506  0  0 0 168721411 168721920     2     2          2    1.8027       -4     NA     FALSE GSM288035
   Checking
1 INBALANCE
2 INBALANCE
3 INBALANCE
4       LOH
5 INBALANCE
6       LOH

match.argand関数を使用すると、多くのステートメントswitchを避けることができます。if

于 2012-09-06T10:15:27.590 に答える