-1

次の形式のテキスト ファイルがあります。

>species1
0.432
0.323
0.987
(possibly continued...)
>species2
-0.332

等々...

私は4つの変数を持っていtotalcomsize, totalp, pol_pla, nvp_vpますが、それらは定数なのでハードコードするのが簡単だとしましょう。すべての値を取得して、>species1上記の4つの変数のそれぞれに対してそれらをプロットし、species1_vs_variable変数が次のいずれかである名前でプロットを保存するにはどうすればよいですか?上記のもの。Rとbashコードを使用してこれを行いたいのですが、誰か助けてもらえますか?


編集済み

簡単な例として、上記の 4 つの変数は FIXED ポイントのセットに対応しているため、それぞれが[1, 2, 3, 4, 5]たとえば次のようになります。a で始まる>各行は、前述の 4 つの変数のそれぞれと比較される新しいデータ セットがあることを示します。その下にある新しい行で区切られたすべての数字は、D.Melanogaster に対応するそのセットに含まれる値>Species1です。>Drosophila Melanogasterただし、基本的には、 . で始まる次の行まですべての値が必要です>。したがって、[0.2, 0.4, 0.6]キイロショウジョウバエ種のセットになる可能性があります。次に、4 つの固定変数ごとにそのデータセットのライン プロットを作成します (totalcomsize, totalp, pol_pla, nvp_vp) プロットを保存し、種に対応するファイル名を付けます。たくさんの種があるので、これを自動化したいです。これは、手動でプロットする #species*4 グラフを意味します。そうすれば、なぜ私がこれをやりたいのかがわかります。種が1行でタブで区切られている、より良い形式にすることができました。

anthomyiidae_sp_2_NVP   anthomyiidae_sp_1_NVP   anthomyiidae_sp_3_NVP
-0.221                  0.188                   0.989
0.972                   0.092                   0.924

そして、それらの値はタブ区切り形式で次の行に表示され、値がなくなるまで続きます。私はこのファイルをインポートすることができました。しかし、私はまだ良い提案を使用することができます.

4

2 に答える 2

0

多くのコメントから明らかなように、あなたは何をしたいですか。

しかし、データの特殊な形式は興味深いと思います。種ごとにグループ化されたwelle形式のdata.frame内のデータがあるため、それらを簡単に操作できます。

特別な区切り文字を使用してデータを読み取ります。

dat <- read.table(text ='>species1
0.432
0.323
0.987
>species2
-0.332',sep ='>',fill=TRUE,colClasses=c('numeric','character'))
   dat
      V1       V2
1     NA species1
2  0.432         
3  0.323         
4  0.987         
5     NA species2
6 -0.332   

V2のギャップを以前の値で埋めようとしています

L <-  dat$V2 != ''
idx <- c(NA,which(L))[cumsum(L)+1]
dat$V2 <- dat$V2[idx]
  dat
      V1       V2
1     NA species1
2  0.432 species1
3  0.323 species1
4  0.987 species1
5     NA species2
6 -0.332 species2

次に、NA値を削除します

dat <- na.omit(dat)

     V1       V2
2  0.432 species1
3  0.323 species1
4  0.987 species1
6 -0.332 species2

コメントで示唆されているように、spiecsによってインデックス付けされたリストにこれを処理するプロセスを作成できます

library(plyr)
ll <- dlply(dat,.(V2),function(x) x$V1)
ll
$species1
[1] 0.432 0.323 0.987

$species2
[1] -0.332
于 2012-12-10T11:43:51.270 に答える
0

変数ごとに 1 つのファイルがある場合 (そして、ファイルが変数にちなんで名付けられていると仮定すると)、ここに私が提案するものがあります:

vars <- c("totalcomsize", "totalp", "pol_pla", "nvp_vp")
for(v in vars){
    f <- readLines(paste(v, "txt", sep"."))
    index <- grep(">",f) # Spot lines that start with a >
    mat <- apply(cbind(index, c(index[-1]-1,length(f))), 1,
                        function(X){as.numeric(f[(X[1]+1):X[2]])})
    # break the file at each lines spotted in the preceding step
    names(res) <- gsub(">","",f[index]) # Names each element of the list according to the lines starting with >
    for(i in 1:length(res)){ # Loop to create a plot for each species vs each variable
        pdf(paste(names(res)[i],"_vs_", v, ".pdf",sep=""))
        plot(res[[i]])
        dev.off()
        }
    }

各変数resは、次の形式のリストです。

res
$species1
[1] 0.432 0.323 0.987
$species2
[1] -0.332
于 2012-12-10T11:59:32.647 に答える