2017-06-04 17 views
0

で別のリストの組み合わせに対するデータのリストを比較し、私は本当に私のスクリプトとの助けが必要、私はR.機能:データR

に私が何をしたいのかについてのいくつかの背景情報のプロではありませんよ。

データ(薬物、病気)のランク付けされたリストが2つあります。これらのデータセットには、遺伝子が発現においてどのように変化するかに関する情報がある。

drugRL(drug)データセットは、ランク付けされたリストであるデータセットです。 diseaseRL(疾患)データセットは、説明においてそれが同じ(?diseaseRL)であるがランク付けされたリストではないと思われるデータセットである。

私がしたことは、diseaseRLデータセットから絶対数を取り出し、データの範囲(そのデータセット内の特定の疾患のベクトルの最大値 - 最小値)を使用してデータを正規化したことです。

私は現在、ランク付けされたリストとして、遺伝子発現の情報を含む2つのデータフレームのリストを持っています。

いくつかのコード例では、最初に必要なパッケージの構築:

# Compile/install packages using biocLite. 
#source("https://bioconductor.org/biocLite.R") 
#biocLite("DrugVsDiseasedata") 
#biocLite("gespeR") 
#biocLite("DrugVsDisease") # may not be needed. 

[インポートパッケージ/データセットを:

#import libraries 
library("DrugVsDisease")#may not be needed 
library("DrugVsDiseasedata") 
library("cMap2data") 
library("gespeR") 

#import datasets 
data(diseaseRL) 
data(drugRL) 


> class(drugRL) 
[1] "matrix" 
> 

> class(diseaseRL) 
[1] "matrix" 
> 


> str(drugRL) 
num [1:11709, 1:1309] 1870 4059 2250 10284 8999 ... 
- attr(*, "dimnames")=List of 2 
    ..$ : chr [1:11709] "ZNF702P" "SAMD4A" "VN1R1" "ZNF419" ... 
    ..$ : chr [1:1309] "(+)-chelidonine" "(+)-isoprenaline" "(+/-)-catechin" "(-)-MK-801" ... 
> 

> str(diseaseRL) 
num [1:11709, 1:45] 0.01683 -0.00112 -0.00126 0.04902 0.02605 ... 
- attr(*, "dimnames")=List of 2 
    ..$ : chr [1:11709] "LINC00115" "GOT2P1" "TP73-AS1" "PIN1P1" ... 
    ..$ : chr [1:45] "wilms-tumor" "glaucoma-open-angle" "diabetes-mellitus-type-ii" "soft-tissue-sarcoma" ... 
> 

は、今私は、データセットを正規化する機能を作成した部分が来る:

NormalizeRLData <- function(x){ 

data.rankedlist <- x 
data.rankedlist.abs <- as.data.frame(abs(data.rankedlist)) 
data.rankedlist.abs.ordered <- 
data.rankedlist.abs[order(data.rankedlist.abs,decreasing=T), , drop = FALSE] 

data.rankedlist.abs.ordered.max <- max(data.rankedlist.abs.ordered) 
data.rankedlist.abs.ordered.min <- min(data.rankedlist.abs.ordered) 

data.rankedlist.abs.ordered.normalizedToOwnRange <- (data.rankedlist.abs.ordered 
/
(data.rankedlist.abs.ordered.max - data.rankedlist.abs.ordered.min)) 

data.rankedlist.abs.ordered.normalizedToOwnRange.ordered <- 
data.rankedlist.abs.ordered.normalizedToOwnRange[order(
data.rankedlist.abs.ordered.normalizedToOwnRange,decreasing=T), , drop = 
FALSE] 

return(data.rankedlist.abs.ordered.normalizedToOwnRange.ordered) 
} 

diseaseRL.normalized <- apply(diseaseRL,2,NormalizeRLData) 
drugRL.normalized <- apply(drugRL,2,NormalizeRLData) 

私が続行するために持っている複数の疑問/問題があります。ランクバイアスオーバーラップ(RBO)を使用して、これまでのことをより効果的に、具体的には次の点で行うことができるかどうかは不明です。

RBOは、2つのランク付けされたリストを比較する機能です。私は遺伝子のデータフレームを含む正規化されたデータのリストのためにこの関数を利用したいと思っています。このrbo関数の入力は名前付きベクトルです。

例:

> a <- c(4,2,5,5) 
> b <- c(1,2,3,4) 
> names(a) <- c('one','two','three','four') 
> names(b) <- c('one','two','three','four') 
> rbo(a,b, p = 0.95) 
[1] 0.9650417 

何これを行うための最も効率的な方法であるので、すべての最初は私がRBO機能を提供するために、現時点で持っているもの、その後、より良い出力を持つことができますか?

そして第二:

ない場合(または類似の場合)、Iはエーテルのための薬剤、および疾患のための別の遺伝子情報を含むdata.framesのリストを有することになります。私はすべての病気に対してすべての薬のrbo機能を実行したい。

私はサプリを使ってみましたが、正しく動作するようにはできませんでした。それが正しい方法であるかどうかはわかりません。私は薬の名前を維持する必要があり、他のデータセットについては病気の名前だけでなく遺伝子名も重要です。だから私は後で遺伝子や病気で確認することができ、薬は相互作用を持っています。

私は本当にここに誰かがこれにいくつかの光を当てることができる願っています!

p.s:誰かが私をここで助けようとしていますが、パッケージのコンパイルに問題がある場合は、私が手伝ってください!たぶん私はサンプルデータセットを送ることができます。

よろしく、 リック

答えて

0

まず、ユーザー定義の方法が大幅に冗長性を低減することができます。 data.frameにキャストする必要はありません。最初はorderに、[]にはベクターを渡します。次に

NormalizeRLData <- function(x){ 
    rnklist <- abs(x) 
    rnklist <- rnklist[order(rnklist)] 

    normRng <- rnklist/(max(rnklist) - min(rnklist)) 
    normRng[order(normRng, decreasing = TRUE)] 
} 


diseaseRL.normalized <- apply(diseaseRL,2,NormalizeRLData) 
drugRL.normalized <- apply(drugRL,2,NormalizeRLData) 

あなたの正規化行列(ないデータフレーム)は、おそらく実際には、この方法にそれぞれの列の特異両方数を2つの入力を渡すことによって、sapplyで実行することができる:最後の行が返されるオブジェクトである場合、以下の調整を検討行列を引数とする。 sapplyに2つのベクトルを渡すと、両方のセット間のすべての組み合わせが繰り返されるデカルト積が適用されます。

行列は名前付きの列と行を維持するため、rboの要件を満たす必要があります。戻り値は、行列M×Nであり、次元は、疾患および薬物行列の列数です。

cols_list <- list(seq(ncol(diseaseRL.normalized)), seq(ncol(drugRL.normalized))) 

rbo_mat2 <- rapply(cols_list, function(i,j) rbo(drugRL.normalized[,j], diseaseRL.normalized[,i], p = 0.95), 
        how="replace")[[1]] 

試験例

私は再現することはできませんので:あなたも(再帰的に適用されます)rapply、関数を適用小さいノウハウを使用することができるかもしれません

# TWO-INPUT SAPPLY 
rbo_mat <- sapply(seq(ncol(diseaseRL.normalized)), function(i,j) rbo(diseaseRL.normalized[,i], drugRL.normalized[,j], p = 0.95), 
        seq(ncol(drugRL.normalized))) 

# EQUIVALENT WITH VAPPLY TO [V]ERIFY TYPE AND LENGTH OF OUTPUT 
rbo_mat <- vapply(seq(ncol(diseaseRL.normalized)), function(i,j) rbo(diseaseRL.normalized[,i], drugRL.normalized[,j], p = 0.95), 
        numeric(seq(ncol(drugRL.normalized))), 
        seq(ncol(drugRL.normalized))) 

OPのデータと必要なパッケージを持っていない、上記のメソッドの動作例です正則ランダムデータを用いた正則化であり、相関関数を使用する。rbo

set.seed(142) 

mat1 <- sapply(1:10, function(i) rnorm(20)) 
colnames(mat1) <- LETTERS[1:10] 
rownames(mat1) <- letters[1:20] 

str(mat1) 
# num [1:20, 1:10] 1.255 1.704 0.88 -0.582 -0.169 ... 
# - attr(*, "dimnames")=List of 2 
# ..$ : chr [1:20] "a" "b" "c" "d" ... 
# ..$ : chr [1:10] "A" "B" "C" "D" ... 

mat2 <- sapply(1:5, function(i) rnorm(20)) 
colnames(mat2) <- LETTERS[1:5] 
rownames(mat2) <- letters[1:20] 

str(mat2)  
# num [1:20, 1:5] -0.156 0.449 -0.822 -1.062 0.838 ... 
# - attr(*, "dimnames")=List of 2 
# ..$ : chr [1:20] "a" "b" "c" "d" ... 
# ..$ : chr [1:5] "A" "B" "C" "D" ... 

corr_mat <- sapply(seq(ncol(mat1)), function(i,j) cor(mat1[,i], mat2[,j]), 
        seq(ncol(mat2))) 

corr_mat2 <- vapply(seq(ncol(mat1)), function(i,j) cor(mat1[,i], mat2[,j]), 
        numeric(ncol(mat2)), 
        seq(ncol(mat2))) 

corr_mat3 <- rapply(list(seq(ncol(mat1)), ncol(mat2)), function(i,j) cor(mat2[,j], mat1[,i]), 
        how="replace")[[1]]