リストの内容がループなしですべて数値であるかどうかを確認する方法やあ、
データをインポートするコードを書いていますが、Python用のMessyTablesと同様のデータチェックを行いたいと思います。
データに「NULL」などが含まれているため、誤って文字としてインポートされる可能性があります。 これらの一般的なインスタンスを削除した後、データが数値であるかどうかをもう一度確認したいと思います。
これを行う最も簡単な方法は、リスト内の項目の周りの「」を削除した後、Try()とMatrix()を使用することです。
columnKeysをループすることができ、Num()変換が失敗してThrow()がトリガーされた場合、テーブルが長く、列に一意の番号が多数あると、これは無駄になります。
以下のコードはlongにエラーを書き込みますが、これは問題ありません。 ただし、JMPアラートウィンドウをアドインに組み込むとトリガーされますが、直接実行した場合はトリガーされません。
リストが数値であるかどうかを確認したり、JMPアラートダイアログを抑制したりするための代替案はありますか?
ありがとう、
スティーブン
dt = New Table( "Check Data",
Add Rows( 2 ),
New Column( "Column 1", Character, "Nominal", Set Values( {"+1%", "2", "-45"} ) )
);
a = Column(dt, "Column 1" ) << Get Values;
Try(
b = Matrix( Parse( Substitute( Char( a ), "\!"", "", " " ) ) );
Show( "Converted to Numeric." );
Show(b);
,
Show( "Not all Numeric..." );
Show(a);
);Re:リストの内容がループなしですべて数値であるかどうかを確認する方法ありがとうございました! 私は何時間もこのようなsthを探していました。Re:リストの内容がループなしですべて数値であるかどうかを確認する方法おそらく、リストから欠落している値を削除する必要があります。これも問題の原因になります。
Names Default to here(1);
a = {"1", "2", "", "45", "", "3"};
x = repeat(1, nitems(a));
x[loc(a, "")] = 0;
a = a[loc(x)];
Batch Interactive(1);
cap = Log Capture(
Try(
Parse( "[" || Concat Items( a, "," ) || "]" );
result = "ok";
,
result = "bad"
)
);
Batch Interactive(0);
Show( result );Re:リストの内容がループなしですべて数値であるかどうかを確認する方法<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Craige @ JMPおかげで、それは魅力的に機能し、他のtryステートメントで再び使用するものになると確信しています。
Re:リストの内容がループなしですべて数値であるかどうかを確認する方法最後に、ダイアログを非表示にするには、BatchInteractive関数を使用します。前と後の2つの呼び出しがあることに注意してください。JMPをBatchInteractive(1)状態で実行したままにすると、JMPを閉じるのに苦労します。
dt = New Table( "Check Data",
Add Rows( 2 ),
New Column( "Column 1", Character, "Nominal", Set Values( {"1", "2a", "-45"} ) )
);
a = Column( dt, "Column 1" ) << Get Values;
Batch Interactive(1);
cap = Log Capture(
Try(
Parse( "[" || Concat Items( a, "," ) || "]" );
result = "ok";
,
result = "bad"
)
);
Batch Interactive(0);
Show( result );
Re:リストの内容がループなしですべて数値であるかどうかを確認する方法ログメッセージを抑制するには:
dt = New Table( "Check Data",
Add Rows( 2 ),
New Column( "Column 1", Character, "Nominal", Set Values( {"1", "2", "-45"} ) )
);
a = Column( dt, "Column 1" ) << Get Values;
cap = Log Capture(
Try(
Parse( "[" || Concat Items( a, "," ) || "]" );
result = "ok";
,
result = "bad"
)
);
Show( result );
Re:parse( "a + b)")エラーをバイパスする方法は? logcaptureについて話し合ってみてください。
編集:結果への冗長な割り当てを削除しました。
Re:リストの内容がループなしですべて数値であるかどうかを確認する方法元のアイデアのバリエーションは次のとおりです。
dt = New Table( "Check Data",
Add Rows( 2 ),
New Column( "Column 1", Character, "Nominal", Set Values( {"1", "2%", "-45"} ) )
);
a = Column(dt, "Column 1" ) << Get Values;
try(parse("["||concatitems(a,",")||"]"),"nope");
Re:リストの内容がループなしですべて数値であるかどうかを確認する方法これはかなり速いようです。 列が数値で指定されている場合、非数値を欠落値に変換するJMP機能(?)を使用するだけです。
*速度を編集*
lista = {"+1%", "2", "-45", ""};
dt = New Table( "Check Data",
New Column( "Character", Character, "Nominal", Set Values( lista ) ),
New Column("Numeric", Numeric, Set Values( lista )),
invisible
);
if( ColNMissing(Column(dt, "Character")) == ColNMissing(Column(dt, "Numeric")),
ret = as list(Column(dt, "Numeric") << get values),
ret = Expr(print("Non-Convertable"));
);
close(dt, no save);
ret;
Re:リストの内容がループなしですべて数値であるかどうかを確認する方法インポートされた列が実際に数値であるかどうかを確認する最も簡単な方法を見つけました。実際には文字としてインポートされたのに、この単純なコード行を使用することです。 見つかった数値の数を返します。
numberofnumerics = Col Number(num(<THE target="" column="">));</THE>
空白でない列の数に対する数値の数の比率を取得することもできます
ratio = Col Number(num(<THE target="" column="">)) / Col Number(<THE target="" column="">);</THE></THE>