rの行列で計算するためにネストされたforループを最適化する

jsescobar

一連のDNA配列ファイル(fasta形式)のヌクレオチド多様性を計算するために、Rでスクリプトを作成しました。ネストされたforループを使用してそれを行うことができます(以下のコードを参照)。ただし、計算上非常に非効率的です。ifelse関数とsapply関数を試しましたが、それを機能させる方法を理解できます。誰かが私がこのコードを最適化するのを手伝ってもらえますか?

# This code works but it’s very inefficient:
library(pegas)
setwd(dir="d:/my_directory")
file.names<-dir(pattern=".fasta")

# Create a nucleotide diversity matrix:
exple<-matrix(nrow=10,ncol=10)
rownames(exple)<-paste("sample",c(1:10),sep="_")
colnames(exple)<-paste("species",c(1:10),sep="_")

# Create a function to read DNA sequences and calculate nucleotide diversity:
pi=function(x,y){
  my_seq<-read.dna(paste(x,y,"fasta",sep="."),format="fasta",as.matrix=FALSE)
  nuc_div<-nuc.div(my_seq)
  }

# Iterate over rows and columns
for(m in 1:nrow(exple)){
  for(o in 1:ncol(exple)){
    if(paste(colnames(exple)[o],rownames(exple)[m],"fasta",sep=".") %in% dir()){
      divp <- pi(colnames(exple)[o],rownames(exple)[m])
      exple[m,o]<-divp
    } 
  }
}

それを効率的にするための私の試み(多くの1つ):

exple2<-melt(exple,varnames=c("sample","species"))
exple2$exist<-ifelse(paste(exple2$species,exple2$sample,"fasta",sep=".") %in% dir(),1,0)
exple2$value<-ifelse(exple2$exist==1,
                  sapply(exple2$sample, function(x){
                    pi(exple2$species,exple2$sample)
}),"NA")

# I get this error
Error in file(con, "rb") : invalid 'description' argument

# Traceback
10. file(con, "rb")
9.  readBin(file, "raw", sz)
8.  read.FASTA(file)
7.  read.dna(paste(x, y, "fasta", sep = "."), format = "fasta", as.matrix = FALSE)
6.  pi(exple2$otu_id, exple2$sample_id)
5.  FUN(X[[i]], ...)
4.  lapply(X = X, FUN = FUN, ...)
3.  sapply(exple2$sample_id, function(x) { pi(exple2$otu_id, exple2$sample_id) })
2.  sapply(exple2$sample_id, function(x) { pi(exple2$otu_id, exple2$sample_id) })
1.  ifelse(exple2$exist == 1, sapply(exple2$sample_id, function(x) { pi(exple2$otu_id, exple2$sample_id) }), "NA")

完璧

read.dna1の長さを期待するファイル引数に複数の要素のベクトルを渡すため、エラーが発生します。基本的に2つの文字ベクトル間のすべての組み合わせを実行しているmapplyため、expand.gridデータフレームを要素ごとにループダウンして、必要な結果の行列を作成することを検討してくださいさらに、tryCatch不足しているファイルに使用します。

pi <- function(x, y) {
  tryCatch({
     my_seq <- read.dna(paste(x, y, "fasta", sep="."), 
                        format="fasta", as.matrix=FALSE)
     return(nuc.div(my_seq))
    }, error = function (e) return(NULL)
  )
}

# DATA FRAME OF ALL POSSIBLE COMBINATIONS (nrow = 100, ncol = 2)
params_df <- expand.grid(sample = paste("sample", c(1:10), sep="_"),
                         species = paste("species", c(1:10), sep="_"))

# CAST NUMERIC VECTOR INTO MATRIX OF DEFINED DIMS
exple <- matrix(mapply(pi, params_df$species, params_df$sample),
                nrow = 10, ncol = 10,
                dimnames = list(paste("sample", c(1:10), sep="_"),
                                paste("species", c(1:10), sep="_"))
               )   

とはいえ、I / Oプロセスでファイルを繰り返し読み取るため、ベクトル化できないため、このソリューションはそれほど高速ではない可能性がありますが、for1つの非表示の適用ファミリループに複数のネストされたループを回避できます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ネストされたforループの時間計算量を最適化するために、重複する計算を避けます

分類Dev

計算を高速化するために、ネストされたforループなしでシーケンスを使用して行列を計算します

分類Dev

rのネストされたforループを最適化する

分類Dev

ネストされたループでの発生数をカウントするためにC#コードを最適化する

分類Dev

BASHで期間を計算するための最適化された方法

分類Dev

平均日を計算するためのRのネストされたループ

分類Dev

ネストされた合計をR型の行列乗算に変換する

分類Dev

Pythonでネストされたforループを最適化する方法

分類Dev

Swiftでネストされたforループを最適化する

分類Dev

Swiftでネストされたforループを最適化する

分類Dev

Rubyでネストされたループを最適化する

分類Dev

IF条件でネストされたwhileループを最適化する

分類Dev

Java 8でハッシュマップを作成するために使用されるこれらのネストされたforループを最適化する最良の方法は何ですか?

分類Dev

ランダムフォレストのMSEを計算するためのネストされたループ

分類Dev

ネストされたループ値をrの行列に格納する方法

分類Dev

さまざまなサイズのリストの行で計算を実行するための最も最適化された方法

分類Dev

ネストされた行列マッチングとcolSumsのRでforループを高速化する方法

分類Dev

ベクトルによる行列演算のグループ化を計算するための効率的な戦略

分類Dev

ネストされたforループとjavascriptのifステートメントを最適化する

分類Dev

パフォーマンスを向上させるために、Rでこの次のプログラムを最適化するにはどうすればよいですか?(計算集約型の並べ替え検定を含むモンテカルロシミュレーション)

分類Dev

リストの付属物を含むネストされたforループを最適化する方法は?

分類Dev

ネストは、行列のリストの列をループするために重複して適用されます

分類Dev

これらのネストされたループを最適化する方法は?

分類Dev

ループで更新された変数がローカルである場合にのみ、計算が最適化されます

分類Dev

Rで座標計算のためにforループをベクトル化する方法は?

分類Dev

ネストされた 'for'ループの時間計算量を計算するにはどうすればよいですか?

分類Dev

ネストされたifステートメント内のネストされたforループを最適化する

分類Dev

2つのリストに適用ファミリ(ネストされたforループを回避するため)

分類Dev

ネストされたPOCOを生成するためのlinqグループ化

Related 関連記事

  1. 1

    ネストされたforループの時間計算量を最適化するために、重複する計算を避けます

  2. 2

    計算を高速化するために、ネストされたforループなしでシーケンスを使用して行列を計算します

  3. 3

    rのネストされたforループを最適化する

  4. 4

    ネストされたループでの発生数をカウントするためにC#コードを最適化する

  5. 5

    BASHで期間を計算するための最適化された方法

  6. 6

    平均日を計算するためのRのネストされたループ

  7. 7

    ネストされた合計をR型の行列乗算に変換する

  8. 8

    Pythonでネストされたforループを最適化する方法

  9. 9

    Swiftでネストされたforループを最適化する

  10. 10

    Swiftでネストされたforループを最適化する

  11. 11

    Rubyでネストされたループを最適化する

  12. 12

    IF条件でネストされたwhileループを最適化する

  13. 13

    Java 8でハッシュマップを作成するために使用されるこれらのネストされたforループを最適化する最良の方法は何ですか?

  14. 14

    ランダムフォレストのMSEを計算するためのネストされたループ

  15. 15

    ネストされたループ値をrの行列に格納する方法

  16. 16

    さまざまなサイズのリストの行で計算を実行するための最も最適化された方法

  17. 17

    ネストされた行列マッチングとcolSumsのRでforループを高速化する方法

  18. 18

    ベクトルによる行列演算のグループ化を計算するための効率的な戦略

  19. 19

    ネストされたforループとjavascriptのifステートメントを最適化する

  20. 20

    パフォーマンスを向上させるために、Rでこの次のプログラムを最適化するにはどうすればよいですか?(計算集約型の並べ替え検定を含むモンテカルロシミュレーション)

  21. 21

    リストの付属物を含むネストされたforループを最適化する方法は?

  22. 22

    ネストは、行列のリストの列をループするために重複して適用されます

  23. 23

    これらのネストされたループを最適化する方法は?

  24. 24

    ループで更新された変数がローカルである場合にのみ、計算が最適化されます

  25. 25

    Rで座標計算のためにforループをベクトル化する方法は?

  26. 26

    ネストされた 'for'ループの時間計算量を計算するにはどうすればよいですか?

  27. 27

    ネストされたifステートメント内のネストされたforループを最適化する

  28. 28

    2つのリストに適用ファミリ(ネストされたforループを回避するため)

  29. 29

    ネストされたPOCOを生成するためのlinqグループ化

ホットタグ

アーカイブ