0

私は 1 つの列と同じ数の行を持つ tsv ファイルをすべて持っています。私は ggplot (stat_smooth) を使用してそれらをプロットしていstat_smoothますが、入力として提供されるファイルの数に基づいて、より多くの関数呼び出しを追加するという意味で、プログラムを柔軟にする必要があります。

入力の長さはから取得されlength(commandArgs(TRUE)) 、データを次のように変数に格納しています

cov=data.frame(sapply(1:length(commandArgs(TRUE)),
    function(i)read.csv(proteins[i],sep='\t',colClasses=c(NA,"NULL"))))

proteins<-commandArgs(TRUE)ファイルはどこにあり、colnames別のコードを使用して追加しています。

さて、問題はggplotに付属しています.ggplotをsmooth_line呼び出して、提供された引数の数に応じてオンザフライで呼び出すにはどうすればよいですか。

私は何かをしようとしていた、

m=ggplot(cov,aes(seq,cov[,2]))
p=function(i){return(stat_smooth(aes(color=colnames(cov)[i])))}
m+p(1)+.....

a を使用しpてコア ggplot プロット イニシエータにを追加しますが、それは意味がないようです。mfor loop

これにはもっと効率的な方法があるはずです。covアイデアは、次のようなデータを持つdata.frameの列に基づいて、呼び出しを構築することです

seq    fileA fileB
1 8429.262  8606.623
2 8766.138  9066.361
3 9081.893  9456.915
4 9342.380  9784.373
5 9480.860 10067.121
6 9581.437 10312.253

誰かが何かを提案できますか?

4

1 に答える 1

1

まず、行ごとに1つの値を使用して、データを長い形式に再形成します。

library(reshape2)
covM <- melt(cov, id.var = "seq")

これにより、次のデータフレームが返されます。

   seq variable     value
1    1    fileA  8429.262
2    2    fileA  8766.138
3    3    fileA  9081.893
4    4    fileA  9342.380
5    5    fileA  9480.860
6    6    fileA  9581.437
7    1    fileB  8606.623
8    2    fileB  9066.361
9    3    fileB  9456.915
10   4    fileB  9784.373
11   5    fileB 10067.121
12   6    fileB 10312.253

新しいオブジェクトを取得したら、簡単にプロットできます。

library(ggplot2)
ggplot(covM, aes(seq, value)) +
  stat_smooth(aes(color = variable))

ここに画像の説明を入力してください

于 2013-03-14T17:27:21.037 に答える