挑戰5
使用矩陣既方便又快速。許多作用於單一值的函數也可以應用於整個矩陣。此外, V Max 、 V Mean和 V Quantile等函數可以應用於矩陣(在這些情況下為列)的函數。本月的挑戰旨在將其提升到一個新的水平。我們將尋求將此功能擴展到 JSL 中不可用的函數,並針對矩陣和清單執行此操作。
- 寫一個名為mad的函數,它以向量作為輸入並傳回中位數絕對偏差(與資料中值的絕對差值的中位數)。例如, mad ([1,2,3,1000])會傳回1。如果有偶數個觀測值,則取中間的平均值來計算中位數。
- 寫一個函數trimmedMean ( vecIn , pctLo , pctHi ),它採用向量 ( vecIn ) 和 0 到 0.5 之間的值,對應於在計算平均值之前刪除的低於平均值 ( pctLo ) 和高於平均值 ( pctHi ) 的觀測值的百分比。修剪值的百分比應該是不超過輸入百分比的最大數字。
- 寫一個函數listContains ( listIn , valueString ),它接受一個字串列表 ( listIn ) 和一個字串 ( valueString ),並傳回一個矩陣值列表,其中矩陣的每個元素對應於valueString在第j項中的起始位置listIn (即listIn的一項可以多次包含valueString )。如果項目不包含字串,則傳回缺失值。
- 寫一個函數applyFunction ( listIn , fn , argList ),它接受輸入列表 ( listIn ) 並將帶有參數argList的函數fn應用於它。假設清單僅包含數字或字串。該函數應該適用於內建函數和使用者提供的函數。它可以傳回單一值、矩陣或值列表,這取決於輸入函數。為簡單起見,假設提供給 applyFunction 的任何函數僅需要對字元、字串、數字、矩陣或列表進行操作(僅限於字元、字串、數字、矩陣或列表項目)。
評分:項目 1 和 2 得 2 分,項目 3 和 4 得 6 分。如果您可以在不使用循環(任何類型)或資料表的情況下編寫項目 3 或 4,則可加 4 分。
報名截止日期為美國東部時間 8 月 17 日星期一晚上 11:59 。
2020 年 8 月 11 日:挑戰的幾個方面存在一些混亂。讓我看看是否可以解決問題:
- 對於trimmedMean , 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應為至少包含一個要搜尋的子字串的清單。但是,如果fn = Length ,則argList將為空。如果fn可以套用於各個元素,請這樣做。例如,如果fn = Char ,則不傳回引用列表,而是引用列表的各個元素。
希望這能讓事情變得更清楚。如果沒有,請告訴我。

本月的挑戰變得更加複雜。
自動化和腳本編寫回覆:挑戰 5對不起大家。 事情對我來說真的很忙,這個挑戰比我預想的要棘手。 我快要寫完了,本週末應該會有一些東西。 希望不久之後會出現新的挑戰。
回覆:挑戰 5有這方面的消息嗎?
回覆:挑戰 5謝謝!
回覆:挑戰 5@大衛_伯納姆我假設是第二個。
回覆:挑戰 5也許是時候問最後一個問題了。ArgList - 是參數清單或實際的 JMP 清單:
applyFunction(inList,fn,a,b,c,flag)
或者
applyFunction(inList,fn,{a,b,c},flag)
如果我沒有收到你的消息,我會認為也可能是這樣!
回覆:挑戰 5沒問題! 這有助於闡明嘗試執行此操作時遇到的問題。 讓我們新增一個標誌作為 applyFunction 的最後一個參數,以指示它是應該按列表應用還是按元素應用。
應用函數(清單中,號,參數列表,旗幟)
回覆:挑戰 5這是非常清楚的,我很樂意接受這些假設。
但是(抱歉!)我可以立即想到一個反方案:JMP 函數連接項目和包含處理整個清單而不是單一元素。雖然我想要和要應用於整個列表,我想要圓形的應用於元素。(我們是否可以沒有一個標誌參數來指示函數是在列表層級還是在單一元素層級操作)。
再次抱歉,我覺得我很痛苦。
回覆:挑戰 5謝謝大衛,
讓我們使用以下假設:
- 號是一個字串。
- 列表輸入是一個完全由數字或完全由字串組成的列表。 如果是數字的話,號將在整個輸入值向量上執行其操作。 如果是字符,它將對各個元素執行操作。
- 參數出現的順序參數列表與使用的順序相同號。
希望這能讓事情變得清楚一些。 再次強調,如果沒有,請告訴我。
回覆:挑戰 5感謝唐的澄清。對 applyFunction 來說,是號表示為字串?如果號可以是任何函數,我們如何知道它是否可以應用於單一元素? - applyFunction 只是將函數名稱視為輸入參數,它不知道該函數能夠做什麼?而如果列表輸入是一個數字列表,那麼對整個列表求和是有意義的,但或者每個項目可能是一個列表,在這種情況下,返回總和列表可能是有意義的。