存在しない列が含まれる可能性があるリストに基づいて列サブセットを作成するユーザーの皆様、こんにちは。
このトピックに関連する以前のディスカッションを読みましたが、すべての答えが見つかりませんでした。
指定された列のリストに基づいて列のサブセットを作成する方法を知りたいです。 指定されたリスト内の列がサブセット化したいデータテーブルに存在する場合、これを簡単に実行できることはわかっています。
私が知りたいのは、リスト内の特定の列が存在しない場合に、「'不正な引数' のアクセスまたは評価で列が見つかりません」というエラーが発生しないようにスクリプトを堅牢にする方法です。
たとえば、以下のスクリプトでは、列、名前、年齢、身長を含む「Big Class.jmp」のサブセットを作成できるようにしたいのですが、それらは存在しますが、スクリプトはそのままでは機能しません。指定されたリストに存在する列が呼び出され、なし。
コードの周囲に Try() を配置しようとしましたが、成功しませんでした。
cols_of_interest = {:name, :age, :height, :none};
show(cols_of_interest);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
big_class_cols = dt << Get Column Names();
show(big_class_cols);
subDt1 = dt << Subset(
Columns( cols_of_interest ),
Output Table Name( "Big Class 2" )
);
」
ありがとう、
サイモン
データアクセスデータのブレンディングとクリーンアップRe: 存在しない列が含まれる可能性があるリストに基づいて列サブセットを作成する非常にエレガントなソリューション。 とてもうまくいきます。
ありがとうジム!Re: 存在しない列が含まれる可能性があるリストに基づいて列サブセットを作成する<
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
cols_of_interest = {name, age, height, none}; //names without scoping colon
AA1 = Associative Array( dt << Get Column Names() );
AA2 = Associative Array( cols_of_interest );
cols = AA2 << intersect( AA1 ) << get keys;
subDt1 = dt << Subset( Columns( cols ), Output Table Name( "Big Class 2" ) );
Re: 存在しない列が含まれる可能性があるリストに基づいて列サブセットを作成するこれに対処する簡単な方法を次に示します。これは、cols_of_interest リストの各列がデータ テーブルに存在するかどうかを確認するだけであり、存在しない場合は、cols_of_interest リストからその列を削除します。
names default to here(1);
cols_of_interest = {:name, :age, :height, :none};
show(cols_of_interest);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
For(i=nitems(cols_of_interest), i>=1, i--,
if(try(column(dt,char(cols_of_interest[i]))<<GET name=""></GET>