2017-09-19 10 views
1

私はgrammを使っていくつかのデータをプロットしています。 長文ストーリー:私は文法関数を呼び出すコマンドとして実行されるユーザー入力に基づいて文字列を構築したいと思います。文字列を作成してコマンドとして実行する方法

私は、いくつかのサンプルのデータを含む構造を持っています - 各サンプルのデータには、いくつかの化学種の強度が含まれています。

私は、各サンプルの各化学種の強度を示す棒グラフを作成しています。つまり、私のy軸は強度、x軸は化学種、私の '色'はサンプルです。

今私は、すべてのサンプル、または各サンプルのすべての化学種をプロットしたくありません。今のところ立つように、私はこれを通過してハードコーディングする必要があります。しかし、私は化学種と私がプロットしたいサンプルをmatlabに取り掛けたいと思います。今のよう

が、これは非常に長いコマンドの書き込みを意味します

g=gramm('y', allData.(fileName).intensities, 'x', ... 
    allData.(fileName).chemicalSpecies, 'color', ... 
    allData.(fileName).sampleName,'subset',... 
    allData.(fileName).sampleNum <u & ... 
    allData.(fileName).sampleNum >l & ... 
    allData.(fileName).chemicalSpecies =="Butanal" | ... 
    allData.(fileName).sampleNum <u & allData.(fileName).sampleNum >l ... 
    & allData.(fileName).chemicalSpecies == "Butenal" |... 
    allData.(fileName).sampleNum <u & allData.(fileName).sampleNum >l ... 
    & allData.(fileName).chemicalSpecies == "Pentanal" |... 
    allData.(fileName).sampleNum <u & allData.(fileName).sampleNum >l ... 
    & allData.(fileName).chemicalSpecies == "Pentenal" | ... 
    allData.(fileName).sampleNum <u & allData.(fileName).sampleNum >l ... 
    & allData.(fileName).chemicalSpecies == "Hexanal" | ... 
    allData.(fileName).sampleNum <u & allData.(fileName).sampleNum >l ... 
    & allData.(fileName).chemicalSpecies == "Hexenal" | ... 
    allData.(fileName).sampleNum <u & allData.(fileName).sampleNum >l ... 
    & allData.(fileName).chemicalSpecies == "Heptanal" | ... 
    allData.(fileName).sampleNum <u & allData.(fileName).sampleNum >l ... 
    & allData.(fileName).chemicalSpecies == "Heptenal"| ... 
    allData.(fileName).sampleNum <u & allData.(fileName).sampleNum >l ... 
    & allData.(fileName).chemicalSpecies == "Octanal" | ... 
    allData.(fileName).sampleNum <u & allData.(fileName).sampleNum >l ... 
    & allData.(fileName).chemicalSpecies == "Octenal" | ... 
    allData.(fileName).sampleNum <u & allData.(fileName).sampleNum >l ... 
    & allData.(fileName).chemicalSpecies == "Nonanal" | ... 
    allData.(fileName).sampleNum <u & allData.(fileName).sampleNum >l ... 
    & allData.(fileName).chemicalSpecies == "Nonenal" | ... 
    allData.(fileName).sampleNum <u & allData.(fileName).sampleNum >l ... 
    & allData.(fileName).chemicalSpecies == "Butanedial"| ... 
    allData.(fileName).sampleNum <u & allData.(fileName).sampleNum >l ... 
    & allData.(fileName).chemicalSpecies == "Pentanedial"| ... 
    allData.(fileName).sampleNum <u & allData.(fileName).sampleNum >l ... 
    & allData.(fileName).chemicalSpecies == "Hexanedial"| ... 
    allData.(fileName).sampleNum <u & allData.(fileName).sampleNum >l ... 
    & allData.(fileName).chemicalSpecies == "Heptanedial"| ... 
    allData.(fileName).sampleNum <u & allData.(fileName).sampleNum >l ... 
    & allData.(fileName).chemicalSpecies == "Octanedial" | ... 
    allData.(fileName).sampleNum <u & allData.(fileName).sampleNum >l ... 
    & allData.(fileName).chemicalSpecies == "Nonanedial") 

をあなたが見ることができるように、これだけのコードプロットサンプルの特定のサブセット(samplenumのUとLの間にあるもの)とのみプロット特定の化学種。

興味のある特定のサンプルと化学種を入力し、その入力を使用してgramm関数を呼び出すコード行を生成します。これは上記のようにハードコードする必要はありません。

基本的には、入力に基づいて文字列を作成し、その文字列をgrammを呼び出すコマンドとして実行する必要があります。

ありがとうございました!

EDIT:明確化

私は、ダイアログボックスが起動し、私はたいサンプルや化学種を選択するために私を求めて何かをしたいです。サンプルA、B、C、および化学種PropanalとButanalを選択したとしましょう。

現在、私は自分自身でこれをハードコーディングする必要があると思います:

g=gramm('y', allData.(fileName).intensities, 'x', ... 
    allData.(fileName).chemicalSpecies, 'color', ... 
    allData.(fileName).sampleName,'subset',... 
    allData.(fileName).sampleName == 'A' &... 
    allData.(fileName).chemicalSpecies =="Propanal" 
    allData.(fileName).chemicalSpecies =="Butanal" | ... 
    allData.(fileName).sampleName == 'B' &... 
    allData.(fileName).chemicalSpecies =="Propanal" 
    allData.(fileName).chemicalSpecies =="Butanal" | ... 
    allData.(fileName).sampleName == 'C' &... 
    allData.(fileName).chemicalSpecies =="Propanal" 
    allData.(fileName).chemicalSpecies =="Butanal") 

代わりにハードコードにこれを有するので、私はこのすべてを含む文字列をしたいのですが、その後、として渡されますコマンド。

これは、文字列を各sampleSameの配列に連結するforループを使用することで実現できると思います。このメソッドを使用すると、

constructPlot = "g = gramm( 'y'、allData。(ファイル名).intensities、 'x'、... allData(fileName)という文字列を作成できます。 (ファイル名).sampleName == 'A' & ... allData。(ファイル名).chemicalSpecies、 'color'、... allData。(ファイル名).sampleName、 'サブセット'、... allData。 .chemicalSpecies == "プロパナール" ALLDATA(fileNameに).chemicalSpecies == "ブタナール" |。。。... ALLDATA(fileNameに).sampleName == 'B' & ... ALLDATA(fileNameに).chemicalSpecies = = "Propanal" allData。(fileName).chemicalSpecies == "Butanal" | ... al lData。(fileName).sampleName == 'C' & ... allData。(ファイル名).chemicalSpecies == "Propanal" allData。(ファイル名)。chemicalSpecies ==「ブタナール」)」

私はconstructPlotを入力すると、それは文字列を表示しますが、私はそれがコマンドとしてではなく、文字列として実行したいあなたが条件を組み合わせることismemberを使用することができます

答えて

2

:。

names = [... 
"Butanal" 
"Butenal" 
"Pentanal" 
"Pentenal" 
"Hexanal" 
"Hexenal" 
"Heptanal" 
"Heptenal" 
"Octanal" 
"Octenal" 
"Nonanal" 
"Nonenal" 
"Butanedial" 
"Pentanedial" 
"Hexanedial" 
"Heptanedial" 
"Octanedial" 
"Nonanedial"]; 
condition = allData.(fileName).sampleNum < u & ... 
allData.(fileName).sampleNum > l & ... 
ismemeber(allData.(fileName).chemicalSpecies ,names); 
+0

実際には、私はこれが動作すると思います!ありがとう! – Snek22

関連する問題