挑战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 只是将函数名称视为输入参数,它不知道该函数能够做什么?而如果列表输入是一个数字列表,那么对整个列表求和是有意义的,但或者每个项目可能是一个列表,在这种情况下,返回总和列表可能是有意义的。