チャレンジ 5
行列の操作は便利かつ高速です。単一の値に作用する多くの関数は、行列全体にも適用できます。さらに、 V Max 、 V Mean 、 V Quantileなどの関数を行列の関数 (この状況では列) に適用できます。今月のチャレンジは、これを次のレベルに引き上げることを目的としています。この機能を JSL では利用できない関数に拡張し、行列とリストの両方に対して実行することを検討します。
- ベクトルを入力として受け取り、中央絶対偏差 (データの中央値からの絶対差の中央値) を返すmadという名前の関数を作成します。たとえば、 mad ([1,2,3,1000]) は 1 を返します。観測値が偶数の場合は、中央の平均値を取得して中央値を計算します。
- ベクトル ( vecIn )と、平均を計算する前に削除される平均を下回る ( pctLo ) および平均を上回る ( pctHi ) 観測値のパーセントに対応する 0 から 0.5 までの値を受け取る関数TrimmedMean ( vecIn 、 pctLo 、 pctHi ) を作成します。トリミングされた値のパーセントは、入力パーセントを超えない最大の数値である必要があります。
- 文字列のリスト ( listIn ) と文字列 ( valueString ) を受け取り、行列の各要素がj番目の項目のvalueStringの開始位置に対応する行列値のリストを返す関数 listContains ( listIn , valueString )を作成します。 listIn (つまり、 listInの項目にはvalueString を複数回含めることができます)。項目に文字列が含まれていない場合は、欠損値を返します。
- 入力リスト ( listIn ) を受け取り、関数fnと引数argListを適用する関数applyFunction ( listIn 、 fn 、 argList ) を作成します。リストには数値または文字列のみが含まれると想定します。この関数は、組み込み関数とユーザー指定関数の両方で機能する必要があります。入力関数に応じて、単一の値、行列、または値のリストを返すことができます。簡単にするために、applyFunction に提供される関数は、文字、文字列、数値、行列、またはリスト (文字、文字列、数値、行列、またはリスト項目に限定) を操作するだけでよいと仮定します。
得点:項目 1 と 2 で 2 ポイント、項目 3 と 4 で 6 ポイント。(いかなる種類の) ループやデータ テーブルを使用せずに項目 3 または 4 を記述できた場合は、4 点が追加されます。
エントリーの締め切りは、米国東部時間で 8 月 17 日月曜日の午後 11 時 59 分です。
2020 年 8 月 11 日:チャレンジのいくつかの側面に関して少し混乱が生じています。問題を解決できるかどうか見てみましょう:
- trimedMeanの場合、 pctLoおよびpctHi は、下は 0、上は 0.5 で区切られた小数値です。たとえば、 pctLo = 0.23 の場合、下端の値の 23% が削除されます。
- listContainsの場合、 listIn = {"ABCD","DEFG", "GHIJ"} かつvalueString = "D" の場合、[4,1,.] が返されます。
- applyFunctionの場合、 listInとargList は両方ともfnへの引数です。主な違いは、 listIn が空になることはありませんが、 argList が空になる可能性があることです。たとえば、 listIn = {"ABCD","DEFG","GHIJ"} およびfn = Containsの場合、 argList は、検索対象の部分文字列を少なくとも 1 つ含むリストである必要があります。ただし、 fn = Lengthの場合、 argList は空になります。 fn を個々の要素に適用できる場合は、そうしてください。たとえば、 fn = Charの場合、引用符で囲まれたリストを返すのではなく、リストの個々の要素を引用符で囲みます。
これで状況がより明確になることを願っています。そうでない場合はお知らせください。

今月のチャレンジはメタになります。
自動化とスクリプト作成Re: チャレンジ 5皆さんごめんなさい。 私にとっては本当に忙しく、この挑戦は予想していたよりも難しいものでした。 執筆はほぼ完了しており、週末までに何かができるはずです。 その後すぐに新しい挑戦ができることを願っています。
Re: チャレンジ 5これに関して何かニュースはありますか?
Re: チャレンジ 5ありがとう!
Re: チャレンジ 5@David_Burnham私は2番目を想定していました。
Re: チャレンジ 5最後にもう 1 つ質問する時間です。ArgList - 引数のリストまたは実際の JMP リストです。
applyFunction(inList,fn,a,b,c,flag)
または
applyFunction(inList,fn,{a,b,c},flag)
連絡がなかったら、どちらかの可能性があると思います。
Re: チャレンジ 5問題はありません! これは、これを実行しようとする際の問題を解明するのに役立ちます。 applyFunction の最後の引数としてフラグを追加して、リストごとに適用するか要素ごとに適用するかを示します。
apply関数(リスト内、ふん、引数リスト、フラグ)
Re: チャレンジ 5それは完全に明らかであり、私はそれらの仮定に喜んで取り組んでいます。
しかし (申し訳ありませんが)、私はすぐに逆のシナリオを思いつきます。それは、JMP 関数です。項目と内容を連結する個々の要素ではなくリスト全体を処理します。そして、私が望んでいるのに対し、和リスト全体に適用するには、ラウンド要素に適用します。(関数がリスト レベルで動作するか、個々の要素のレベルで動作するかを示すフラグ パラメータはできないでしょうか)。
何度も申し訳ありませんが、苦痛を感じているようです。
Re: チャレンジ 5ありがとうデイビッド、
次の仮定を使用してみましょう。
- ふんは文字列です。
- リストインは、完全に数値または完全に文字列で構成されるリストです。 数字の場合は、ふんは入力値のベクトル全体に対して演算を実行します。 文字の場合、個々の要素に対して操作が実行されます。
- 引数が現れる順序引数リストで使用されるのと同じ順序ですふん。
これで状況が少し明確になると思います。 そうでない場合は、もう一度お知らせください。
Re: チャレンジ 5ドンさん、ご説明ありがとうございます。applyFunction の場合、ふん文字列として表現されるのか?もしふん任意の関数を指定できますが、それが個々の要素に適用できるかどうかをどのように確認すればよいでしょうか? - applyFunction は関数名を入力パラメーターとして認識するだけで、その関数が何を実行できるのかを知りません。で、もしリストインが数値のリストである場合、リスト全体を合計するのが合理的ですが、各項目がリストである場合もあり、その場合は合計のリストを返すことが合理的です。