도전과제 5
행렬 작업은 편리하고 빠릅니다. 단일 값에 대해 작동하는 많은 함수를 전체 행렬에 적용할 수도 있습니다. 또한 V Max , V Mean 및 V Quantile 과 같은 함수를 행렬(이러한 상황에서는 열)의 함수에 적용할 수 있습니다. 이번 달의 챌린지는 이를 다음 단계로 끌어올리는 것을 목표로 합니다. 우리는 이 기능을 JSL에서 사용할 수 없는 함수로 확장하고 행렬과 목록 모두에 대해 수행하려고 합니다.
- 벡터를 입력으로 받아 중앙값 절대 편차(데이터 중앙값과의 절대 차이의 중앙값)를 반환하는 mad 라는 함수를 작성하세요. 예를 들어 mad ([1,2,3,1000])은 1을 반환합니다. 관측치가 짝수인 경우 중앙의 평균값을 사용하여 중앙값을 계산합니다.
- 평균이 계산되기 전에 제거되는 평균 미만( pctLo ) 및 초과( pctHi ) 관측치의 백분율에 해당하는 벡터( vecIn )와 0 에서 0.5 사이의 값을 사용하는 함수 TrimmedMean ( vecIn , pctLo , pctHi )를 작성하세요. 잘린 값의 백분율은 입력된 백분율을 초과하지 않는 가장 큰 숫자여야 합니다.
- 문자열 목록 ( listIn )과 문자열( valueString )을 가져와서 행렬의 각 요소 가 j 번째 항목에서 valueString 의 시작 위치에 해당하는 행렬 값 목록을 반환하는 함수 listContains( listIn , valueString )를 작성하세요. listIn (즉, listIn 의 항목은 valueString을 두 번 이상 포함할 수 있습니다). 항목에 문자열이 포함되어 있지 않으면 누락된 값을 반환합니다.
- 입력 목록( listIn )을 취하고 argList 인수와 함께 fn 함수를 적용하는 함수 applyFunction ( listIn , fn , argList )을 작성하세요. 목록에 숫자나 문자열만 포함된다고 가정합니다. 이 함수는 내장 함수와 사용자 제공 함수 모두에서 작동해야 합니다. 입력 함수에 따라 단일 값, 행렬 또는 값 목록을 반환할 수 있습니다. 단순화를 위해 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@David_Burnham 나는 2위를 가정하고 있었다.
답: 챌린지 5이제 마지막 질문 하나를 던져볼 시간입니다.ArgList - 인수 목록 또는 실제 JMP 목록입니다.
applyFunction(inList,fn,a,b,c,flag)
또는
applyFunction(inList,fn,{a,b,c},flag)
내가 당신의 소식을 듣지 못한다면 둘 중 하나일 수 있다고 가정하겠습니다!
답: 챌린지 5아무 문제 없습니다! 이는 이 작업을 수행할 때 발생하는 문제를 명확히 하는 데 도움이 됩니다. ApplyFunction의 마지막 인수로 플래그를 추가하여 목록별로 적용해야 하는지 요소별로 적용해야 하는지 표시해 보겠습니다.
적용함수 ( 목록에 있음 , fn , 인수 목록 , 깃발 )
답: 챌린지 5이는 매우 명확하며 저는 이러한 가정을 바탕으로 작업하게 되어 기쁩니다.
하지만 (죄송합니다!) 저는 즉시 반대 시나리오를 떠올릴 수 있습니다. 바로 JMP 함수입니다. 항목 및 포함 연결 개별 요소가 아닌 전체 목록을 처리합니다.그리고 나는 원하지만 합집합 전체 목록에 적용하려면 둥근 요소에 적용합니다.(함수가 목록 수준에서 작동하는지 아니면 개별 요소 수준에서 작동하는지를 나타내는 플래그 매개변수가 없을 수 있나요?)
다시 한번 죄송합니다. 제가 괴로움을 겪고 있는 것 같습니다.
답: 챌린지 5고마워요 데이빗,
다음 가정을 사용해 보겠습니다.
- fn 문자열입니다.
- 목록에서 전체가 숫자 또는 전체 문자열로 구성된 목록입니다. 숫자라면, fn 입력 값의 전체 벡터에 대해 작업을 수행합니다. 문자인 경우 개별 요소에 대한 작업을 수행합니다.
- 인수가 나타나는 순서 인수 목록 에서 사용되는 순서와 동일합니다. fn .
바라건대 상황이 좀 더 명확해지기를 바랍니다. 그렇지 않다면 다시 알려주세요.
답: 챌린지 5설명해주셔서 감사합니다.ApplyFunction의 경우 fn 문자열로 표현되나요?만약에 fn 어떤 기능이든 가능합니다. 개별 요소에 적용할 수 있는지 여부를 어떻게 알 수 있나요? - applyFunction은 함수 이름을 입력 매개변수로 볼 뿐이며 함수가 무엇을 할 수 있는지 전혀 모릅니다.그리고 만약에 리스트인 숫자 목록인 경우 전체 목록을 합산하는 것이 합리적이지만, 각 항목이 목록일 수도 있으며 이 경우 합계 목록을 반환하는 것이 합리적일 수 있습니다.