エラー: 「式が使用可能な列タイプに適合しません」<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />やあみんな、
次のコードでは、「式が利用可能な列の種類に適合しません」というエラーが発生します。このエラーは数式の評価中に発生します。
新しい列を追加している「dt」というテーブル内の2つの列を減算するなど、新しい列を追加しているのと同じテーブルを参照しようとしているだけです... なぜ機能しないのかわかりません。
dt = myTable();
Cols = dt << GetColumnNames("String");
//待って(3);
For(c=1, c<=NItems(cols), c++,
If( StartsWith(cols、「HTOL」)、
dt << 新しい列(cols|| " Δ"、数値、連続、数式( eval list( 列(dt,4)) ) );
);
);
ありがとう
ジェフ
Re: エラー: 「式が使用可能な列タイプに適合しません」ありがとうPMroz! 私は昨夜、あなたとよく似た言葉を使ってこれを解決しました。次のようなものを使用しました。
parseを使用したと思います.. eval を使用する必要があったかどうかは覚えていませんが、60% くらいは使用したと確信しています。
必要な方がいらっしゃいましたら、これに返信していただければ、正確な構文を調べます。
dt << 新しい列( parse(cols|| " Δ")、数値、連続、数式(:^cols)^ - :データ 0))
Re: エラー: 「式が使用可能な列タイプに適合しません」@Stephen.pearson と同様の手法:
dt =新しいテーブル( "デモ" 、行の追加( 3 ) 、
新しい列( 「データ0」 、数値、継続的、フォーマット( "最高" 、 12 ) 、設定値( [ 1 、 2 、 3 ] ) ) 、
新しい列( 「データ100」 、数値、継続的、フォーマット( "最高" 、 12 ) 、設定値( [ 4 、 5 、 6 ] ) ) 、
新しい列( 「データ200」 、数値、継続的、フォーマット( "最高" 、 12 ) 、設定値( [ 7 、 8 、 9 ] ) )
) ;
コル= dt <<列名を取得する( "弦" ) ;
のために( c = 1 、 c <=ナイアイテム(コル) 、 c ++、
もし(から始まる(大文字(コル[ c ]) 、 "データ" ) 、
new_col_expr =エヴァリンサート( "\[dt << 新しい列(cols|| " Δ"、数値、連続、数式(:^cols^ - :データ 0))]\") ;
評価(解析する( new_col_expr )) ;
) ;
) ;
Re: エラー: 「式が使用可能な列タイプに適合しません」列(dt,c)と同じではありません:データ100式に関する限り。
このコードを動作させる 1 つの方法は、実行前に JSL を評価する動的 JSL を使用することです。
// これが完全に正しい構文かどうかはわかりませんが、アイデアはわかりますか
ターゲット列 = column(dt,c) <
// if 節内に入る動的置換
評価(
解析(
評価挿入(
「\[
dt << 新しい列(cols|| " デルタ"、数値、連続、数式( :^ターゲット列^ - :データ 0 ) );
]\"
) ) );
列名に特殊文字が含まれている場合は、:Name(" を使用する必要がある場合があります。 ^ターゲット列^ ") を式に含めます。 列名に ^/-+* 記号が含まれている場合、数式が確実に評価されないため、それでも奇妙な結果が得られる可能性があります。
Re: エラー: 「式が使用可能な列タイプに適合しません」早速のご返事ありがとうございます!!
データ列を持つテーブル「dt」があります。それらは、「データ 0」、「データ 100」、「データ 200」、または未知の数値までの可能性があります。
列の名前が何であれ、列が「データ 0」であっても、そこから「データ 0」列を減算したいと考えています(つまり、その列はすべてゼロですが、「データ 100」などの他の列はすべてゼロではありません)。 。
そこで、各列をチェックする for ループを作成しようとしていました。たとえば、「data 100」という名前が付いている場合、式を含む「data 100 delta」列を自動的に作成したいと考えていました。(data 100 - データ 0)。
次のようにできると思いました。
dt = myTable();
Cols = dt << GetColumnNames("String");
//待って(3);
For(c=1, c<=NItems(cols), c++,
If( StartsWith(cols、 "データ")、
dt << 新しい列(cols|| " デルタ"、数値、連続、数式(列(dt,c) - :データ0 ) );
);
);
「:data 0」参照は機能しているようです。「:data 0」データを「data 100 delta」列にコピーしますが、「column(dt,c)」を入力すると、データ100列目でエラーになります....
ありがとう!!
Re: エラー: 「式が使用可能な列タイプに適合しません」ジェフ、
問題は「eval list( column(dt,4) )」です。 Eval List() は、評価されるリストがあることを期待します。例: {1,2,3}。
これは意図したものですか? Column(dt, 4) の内容はリストですか? その列には数値が含まれている可能性が高いため、エラーがスローされます。
それでも、JMP データ テーブルの列は、数値、文字、および行状態の 3 つのデータ型のみを受け入れます。 実際に Column(4) のすべてのセルにリストがある場合、それらは実際には文字列になります。つまり、「{1,2,3}」です。 その場合、まず文字列を解析して式に変換する必要があり、その後 EvalList() が機能します。
問題は、その式で何をするつもりだったのかということです。