Xファンクションの入力と出力XF-Input-and-Output
Xファンクションの変数
XファンクションはLabTalkの変数型(StringArrayを除く)を引数として受け付けます。LabTalk変数だけでなく、Xファンクションは複雑なデータ構造の特別な変数型を使うこともできます。
これらの特別な変数型は、下表にあるように Xファンクションへの引数としてのみ動作します。(使用可能なキーワードについての詳細は、この章にある範囲の特殊なキーワードセクションをご覧ください。)
変数型 |
説明 |
サンプル構造 |
コメント
|
XY範囲
|
XとYの組合せ。任意でYエラーバーデータを含む。
|
- (1,2)
- <new>
- (1,2:end)
- (<input>,<new>)
- [book2]sheet3!<new>
|
グラフに対して、インデックスを直接使って、プロット範囲 (1,2)がグラフ上の1番目と2番目のプロットであることを示す。
|
XYZRange
|
X, Y, Zデータの組合せ。
|
- (1,2,3)
- <new>
- [book2]sheet3!(1,<new>,<new>)
|
|
ReportTree
|
階層レポートのツリーベースオブジェクトは ワークシート範囲またはLabTalkツリー変数に結びついている必要がある。
|
- <new>
- [<input>]<new>
- [book2]sheet3
|
|
ReportData
|
ベクターのコレクションのツリーベースオブジェクトは ワークシート範囲またはLabTalkツリー変数に結びついている必要がある。ReportTreeとは違って、ReportDataは通常のワークシートに出力し、ワークシート内の既存のデータの終わりに追加するのに使うことができる。ReportDataオブジェクト内のすべての列はグループ化されている必要があります。
|
- <new>
- [<input>]<new>
- [book2]sheet3
- [<input>]<input>!<new>
|
|
変数型についてより理解を深めるには、この章のReportDataの出力セクションのサンプルを参照してください。
範囲の特殊なキーワード
Keyword for RangeRange Keyword
- <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列で既存データを上書きしないよう注意が必要です。
|
|