Xファンクションの入力と出力

Xファンクションの変数

XファンクションはLabTalkの変数型(StringArrayを除く)を引数として受け付けます。LabTalk変数だけでなく、Xファンクションは複雑なデータ構造の特別な変数型を使うこともできます。

これらの特別な変数型は、下表にあるように Xファンクションへの引数としてのみ動作します。(使用可能なキーワードについての詳細は、この章にある範囲の特殊なキーワードセクションをご覧ください。)

変数型 説明 サンプル構造 コメント
XY範囲

XとYの組合せ。任意でYエラーバーデータを含む。

  1. (1,2)
  2. <new>
  3. (1,2:end)
  4. (<input>,<new>)
  5. [book2]sheet3!<new>
グラフに対して、インデックスを直接使って、プロット範囲
(1,2)がグラフ上の1番目と2番目のプロットであることを示す。
XYZRange

X, Y, Zデータの組合せ。

  1. (1,2,3)
  2. <new>
  3. [book2]sheet3!(1,<new>,<new>)
ReportTree

階層レポートのツリーベースオブジェクトは
ワークシート範囲またはLabTalkツリー変数に結びついている必要がある。

  1. <new>
  2. [<input>]<new>
  3. [book2]sheet3
ReportData

ベクターのコレクションのツリーベースオブジェクトは
ワークシート範囲またはLabTalkツリー変数に結びついている必要がある。ReportTreeとは違って、ReportDataは通常のワークシートに出力し、ワークシート内の既存のデータの終わりに追加するのに使うことができる。ReportDataオブジェクト内のすべての列はグループ化されている必要があります。

  1. <new>
  2. [<input>]<new>
  3. [book2]sheet3
  4. [<input>]<input>!<new>

変数型についてより理解を深めるには、この章のReportDataの出力セクションのサンプルを参照してください。

範囲の特殊なキーワード

<new>
新しいオブジェクトを追加/作成
<active>
アクティブオブジェクトを使う
<input>
同じXファンクションの入力範囲と同じ
<same>
Xファンクションの前の変数と同じ
<optional>
オブジェクトが入力または出力で任意であることを示す
<なし>
オブジェクトは作成されない

ReportDataの出力

多くのXファンクションがReportData オブジェクトの形式で、複数の出力ベクターを生成します。 通常、ReportData オブジェクトは、NLFit XファンクションからのFit Curves出力のように、ワークシートと結びついています。 例えば、fft1 Xファンクションからの出力を考えてみましょう。

// ReportData出力をBook2, Sheet3に送る
fft1 rd:=[book2]sheet3!;        
// ReportData出力をBook2の新しいシートに送る        
fft1 rd:=[book2]<new>!;      
// ReportData出力をアクティブワークブック/シートの列4に送る           
fft1 rd:=[<active>]<active>!Col(4);  
// ReportData出力をアクティブワークブックの新しいシートに送る   
fft1 rd:=[<active>]<new>!;
// ReportData出力をtr1というツリー変数に送る 
// 'tr1' が存在しなければ、作成されます。              
fft1 rd:=tr1;

レポートデータをツリー変数に送る

ReportData出力を中間変数として、このようなデータを一時的に保持するワークシートのオーバーヘッドを含みたくないかもしれません。

そして、1つの代替手段は、複数ベクターを1つにまとめ、このようなベクターデータの追加の属性をサポートするツリー変数を使って、レポートデータオブジェクトを作り上げるデータセットを保存することです。

ワークシートの出力範囲の仕様は、通常、次のような形式となっています。[Book]Sheet!, <new>, または <active>出力文字列がこれらの通常のブック-シートの仕様の1つを持たない場合、出力は自動的にLabTalkツリー名であると考えられます。

以下は、 avecurves Xファンクションのサンプルの機能です。 このサンプルでは、結果のReportDataオブジェクトがツリー変数への最初の出力であり、そして、そのツリーからの1つのベクターは入力データがある同じシートの特定の列位置に置かれます。 ReportDataは通常新しいシートに出力されます。

int nn = 10;
col(1)=data(1,20);  // いくつかデータを入力

loop(i,3,nn){wcol(i)=normal(20);};  
range ay=col(2); // 'avecurves'のY出力   
Tree tr; // 出力ツリー    
avecurves (1,3:end) rd:=tr;           
// ツリーノード(ベクター)'aveY'を範囲'ay'に割り当て
//  'tr.='を使ってツリー構造を表示

ay=tr.Result.aveY;                    
ay[L]$="Ave Y"; // そのロングネームをセット
// デフォルトXを使って散布図としてデータをプロット
plotxy (?,3:end) p:=201;    
// 範囲'ay'のデータを折れ線で同じグラフに追加           
plotxy ay o:=<active> p:=200;

レポートデータを直接ブック/シート/列の特定の位置に送る

Xファンクションから結果を新しい列として入力シートに配置するだけなら、次のように行います。

avecurves (1,2:5) rd:=[<input>]<input>!<new>;

レポートデータを出力する入力シートの特定の列を指定する場合、次のように指定します。

avecurves (1,2:5) rd:=[<input>]<input>!Col(3);

これらの新しい列を見つけるための追加のコードを記述する必要があるので、この後に続くデータアクセスは複雑になります。

ReportDataタイプの出力が、使われている特定のXファンクションに依存して異なるデータの量(列)を含むことが分かります。 結果を既存のシートに送る場合、生成されるReportData列で既存データを上書きしないよう注意が必要です。