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

Xファンクションの変数

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

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

変数型 説明 サンプル構造 コメント
XYRange

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>
オブジェクトが入力または出力で任意であることを示す
<none>
オブジェクトは作成されない

レポートデータの出力

多くのXファンクションがReportData オブジェクトの形式で、複数の出力ベクターを生成します。 通常、ReportData オブジェクトはワークシートと結びついています。デフォルトでは、入力データと同じワークブックの新しいシートになります。

レポートデータをワークシートに送る

出力が範囲(上記の特別な範囲、通常のワークシートまたは列範囲、または両方の組み合わせのいずれか)に設定されている場合、ReportDataはワークシートに出力されます。

次のスクリプトは、ReportData出力をワークシートに配置します。

//Book2のSheet2 へ 
//シートがない場合は作成
//シートがある場合は空の1列目から出力
fft1 rd:=[book2]sheet3!; 
// Book2 の新規シートへ
fft1 rd:=[book2]<new>!;      
// アクティブブックのアクティブシートの列4へ
fft1 rd:=[<active>]<active>!Col(4);  
// 入力データのワークブック内の新規シートへ
fft1 rd:=[<input>]<new>!;

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

ReportDataタイプの出力には、使用されているXファンクションに応じて異なる量 (列) のデータが含まれることに注意してください。 結果を既存のシートに送信する場合は、生成されたReportData列で既存のデータを上書きしないように注意してください。

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

ReportDataをTree変数に送ることで、このような出力を保持するワークシートを作成するオーバーヘッドを回避できます。

出力が[Book]Sheet!<new><active>の範囲指定形式のいずれでもない場合は、自動的にLabTalkツリー名とみなされます。

例えば、avecurves Xファンクション: には、aveXaveY という2 つのリーフを持つ ReportData 出力が含まれています。

以下のスクリプトは、ワークシート内のデータを平均し、ReportData をツリー変数に出力します。ツリー変数には2つのベクトルリーフが含まれています。これら2つのリーフをデータセット変数に割り当て、データセット変数を折れ線グラフとしてプロットします。平均の結果を出力するための追加のワークシートや列は作成されません。

col(1)=data(1,20);  //col 1に1, 2, ...を入力20
int nn = 5; 
loop(i,2,nn){wcol(i)=normal(20);};  //列2から5に正規化されたデータを入力

//2から5までの列の平均曲線を実行出力をツリー変数 tr に書き込み
avecurves (1,2:$(nn)) rd:=tr; 
tr.=; // 内容を含むツリー構造を確認するには、aveX と aveY はベクトル
//ツリーの葉を一時的なデータセット変数に割り当て
dataset avX = tr.Result.aveX;  
dataset avY = tr.Result.aveY;    

// ワークシートのデフォルトのX列を使用してcol2から5を散布図としてプロット
plotxy (?,2:nn) p:=201;   

//データセット変数avXをX、avYをYとする折れ線プロットをアクティブなグラフに追加
plotxy (avX, avY) o:=<active> p:=200;

Xファンクション入力にリテラル文字列を割り当て

<[< および >]>は、LabTalkリテラル文字列をxあファンクションの入力変数に割り当てるために導入されました。入力文字列に文字列レジスタや'"$などの特殊文字が含まれている場合に便利です。

以下のスクリプトは、xファンクション変数で<[<>]>を使用するかどうかの違いを示しています。

%A = "Mysplit";
wsplit mode:=ref ref:=[Book1]Sheet1!A"Fish" name:="%A";  //結果シート名はMysplit
wsplit mode:=ref ref:=[Book1]Sheet1!A"Fish" name:=<[<%A>]>; //結果シートめーはFish 
//名前は%aとして設定。これは、XFの参照列の名前として事前定義された変数

次の例は、Xファンクション入力で""を使用する方法を示しています。

patternT text:=<[<"Sample A" "Sample B" "Sample C">]>;