<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />私は、dt << set row states(単一列行列)関数を使用する方が、より伝統的なForEachRow(Rowstate()= Colorstate(LevelColor(Row()、n_groups、"JMP Light")))を使用するよりはるかに速いことを発見しました。それで私はそれを使いたいのです。 ただし、これを行うには、スクリプト作成者は単一列行列(ここでは "rscode"と呼びます)を直接構築する必要があります。 JMPスクリプトガイドによると、マトリックスは次のように行の状態を決定します。
rscode
=
選択(r)+
2 *除外(r)+
4 *隠し(r)+
8 *とラベルされた(r)+
16 *(r)+のマーカー
256 *(r)の色。
マーカー値の設定方法についての2010年のErin Vangのブログ記事(彼女はUnicode文字をマーカーとして含める方法について説明しました)を読んだことがありますが、色に関する同等の説明はまだ見つかっていません。 私が抱えている問題は、"color of"関数が有効な色の状態ではなく、むしろ負の数である数を返すことです。理想的に私がやりたいことは私自身でそれを作成しなければならないよりもむしろ「スペクトル」と「JMPデフォルト」のような内蔵カラーテーマを使うことです。 そのため、行状態行列に値を設定するためにColorOf(ColorState())を使用できるようにしたいと思います。
さて、ダミーテーブルに色の状態を設定し、(dt <<行の状態を取得)/ 256コマンドを使用して、色インデックスのベクトルを取得しますが、これらは整数ではありません。 私の質問の1つは、非整数部分の計算方法を教えてください。
たとえば、ダミーテーブルを作成し、そのカラーステートを設定してから、出力ベクトルのエントリ(JMPのカラーテーブル0-84からのインデックスを含む)と負の数を与えるColorOf(...)関数の間の不一致を調べます。そのうちの大きいです。 これに何かパターンがありますか私が欠けている機能はありますか?blah!= blah2と結果の表の色は非常に異なることに注意してください。
dt =新しいテーブル( "test"、
行を追加する(100)
新しい列( "col1"、
数値、
連続した、
フォーマット( "最高"、10)、
式(行())
)
;
ForEachRow(
RowState()=
ColorState(HeatColor(Row()/ NRows(dt)、<< "Jet"))
;
blah =(dt << GetRowStates)/ 256;
blah2 = J(NRows(dt)、1,0);
ForEachRow(Show(blah2 [Row()] = COlorOf(RowState())));
dt << SetRowStates(blah2 * 256)
/ *
何とか=
[53.0000000318978、53.0000000342261、53.0000000367872、53.0000000391155、
53.0000000414439、53.0000000437722、53.0000000463333、53.0000000486616、
53.0000000509899、21.0000000533182、21.0000000558794、21.0000000582077、
21.000000357395、21.0000009534415、21.0000015494879、21.000002205139、
21.0000028011855、21.0000033972319、21.0000039932784、21.0000045893248、
21.0000051853713、5.00000584102236、5.00000643706881、5.00000703311525、
5.0000076291617、13.0000082252081、13.0000088212546、45.0000094769057、
45.0000100729521、45.0000106689986、45.000011265045、45.0000119206961、
45.0000125167426、45.000013112789、42.0000137088355、42.0000143644866、
42.000014960533、42.0000915501732、42.0002441336401、71.0003967175726、
71.0005645607598、71.0007171453908、71.0008697302546、71.001022315817、
68.0011749016121、68.0013274876401、68.0014953331556、68.0016479198821、
68.0018005073071、68.0019530949649、68.0019683514256、68.0019988666754、
68.0020751582924、68.0021514496766、76.0022735176608、76.0024108444341、
76.0025634299964、76.0027617919259、76.0029754126445、76.0032042919193、
41.003463689005、41.0037536036689、41.0039058923721、41.0039052963257、
41.0039046406746、41.0039040446281、9.0039034485817、9.00390285253525、
9.00390219688416、9.00390160083771、9.00390100479126、6.00390040874481、
6.00389975309372、6.00389915704727、6.00389856100082、6.00389796495438、
6.00389736890793、6.00389677286148、6.00389611721039、6.00389552116394、
6.00389492511749、6.00389432907105、3.0038937330246、19.0038931369782、
19.0038924813271、19.0038918852806、19.0038912892342、19.0038146972656、
19.003662109375、19.0034942626953、19.0033416748047、19.0031890869141、
19.0030364990234、51.0028686523438、51.0027160644531、51.0025634765625、
51.0024108886719、51.0022430419922、51.0020904541016、51.0019378662109];
blah2 =
[ - 137、- 147、- 158、- 168、- 178、- 188、- 199、- 209、- 219、- 229、- 240、- 250、- 1535、-
4095、- 6655、- 9471、- 12031、- 14591、- 17151、- 19711、- 22271、- 25087、- 27647、- 30207、
-32767、-35327、-37887、-40703、-43263、-45823、-48383、-51199、-53759、-56319、-
58879、-61695、-64255、-393205、-1048546、-1703889、-2424770、-3080116、-3735463、
-4390813、-5046164、-5701516、-6422407、-7077762、-7733120、-8388479、-8454005、-
8585067、-8912737、-9240406、-9764684、-10354498、-11009848、-11861806、-12779300、
-13762329、-14876431、-16121605、-16775680、-16773120、-16770304、-16767744、-
16765184、- 16762624、- 16759808、- 16757248、- 16754688、- 16752128、- 16749312、-
16746752、- 16744192、- 16741632、- 16739072、- 16736512、- 16733696、- 16731136、-
16728576、- 16726016、- 16723456、- 16720896、- 16718080、- 16715520、- 16712960、-
16384000、- 15728640、- 15007744、- 14352384、- 13697024、- 13041664、- 12320768、-
11665408、- 11010048、- 10354688、- 9633792、- 8978432、- 8323072]; * /
したがって、今のところ決めたのは、自分が持っているグループの数に等しい行数を持つダミーテーブルを作成し、それらの状態を設定してから、get row statesを使用して状態情報を抽出することです。
私はいくつかのタイミング解析をしました、そして、ForEachRow(...)は十分に小さいデータ時間のためにごくわずかな時間がかかるようですが、ForEachRow(...)を実行するのにかかる時間は行数とはるかに速くスケールしますある時点でForEachRow(...)は、rowstateベクトルを直接生成してからdt << Set Row Statesを使用するよりも10倍以上長くなります(〜1000行以上のテーブルの場合)。
dv:jmp_markers = Function({n_groups}、{Default Local}、
dt =新しいテーブル( "delete me"、
目に見えない、
行を追加(n_groups)、
新しい列( "col1"、
数値、
連続した、
フォーマット( "最高"、10)、
式(行())
)
;
dt << RunFormulas;
dt << MarkerByColumn( "col1"、MarkerTheme(dv:row_legend_marker_theme));
output_list =(dt << GetRowStates)/ 16;
閉じる(dt、保存しない)。
output_list;
//色のための類似した関数...私が色のためにForEachRow(...)代入を使うことを除いて...