Sfida 5
Lavorare con le matrici è comodo e veloce. Molte funzioni che operano su un singolo valore possono essere applicate anche a un'intera matrice. Inoltre, funzioni come V massimo , V Media , e V Quantile può essere applicato a una funzione della matrice (colonne, in queste situazioni). La sfida di questo mese mira a portare tutto ciò al livello successivo. Cercheremo di estendere questa funzionalità a funzioni che non sono disponibili in JSL e di farlo sia per matrici che per liste.
- Scrivi una funzione denominata pazzo che prende un vettore come input e restituisce la deviazione assoluta mediana (la mediana delle differenze assolute rispetto alla mediana dei dati). Per esempio, pazzo ([1,2,3,1000]) restituisce 1. Se è presente un numero pari di osservazioni, prendi il valore medio al centro per calcolare la mediana.
- Scrivi una funzione tagliatoMean ( vecIn , pctLo , pctCiao ) che richiede un vettore ( vecIn ) e un valore compreso tra 0 e 0,5 corrispondente alla percentuale di osservazioni riportate di seguito ( pctLo ) e al di sopra ( pctCiao ) la media che vengono rimosse prima del calcolo della media. La percentuale dei valori ritagliati deve essere il numero più grande che non supera la percentuale di input.
- Scrivi una funzione elencoContiene ( elencoIn , valueString ) che accetta un elenco di stringhe ( elencoIn ) e una stringa ( valueString ) e restituisce un elenco di valori di matrice in cui ciascun elemento della matrice corrisponde a una posizione iniziale di valueString nel J elemento di elencoIn (vale a dire, un elemento di elencoIn potrebbe contenere valueString più di una volta). Restituisce il valore mancante se l'elemento non contiene la stringa.
- Scrivi una funzione applyFunction ( elencoIn , ecc , argList ) che accetta un elenco di input ( elencoIn ) e applica la funzione ecc con argomenti argList ad esso. Supponiamo che l'elenco conterrà solo numeri o stringhe. La funzione dovrebbe funzionare sia per le funzioni integrate che per quelle fornite dall'utente. Potrebbe restituire un singolo valore, una matrice o un elenco di valori a seconda della funzione di input. Per semplicità, presupponiamo che qualsiasi funzione fornita a applyFunction dovrà operare solo su un carattere, una stringa, un numero, una matrice o un elenco (limitata a carattere, stringa, numero, matrice o elementi dell'elenco).
Punteggio: Due punti per i punti 1 e 2, sei punti per i punti 3 e 4. Quattro punti extra se riesci a scrivere l'elemento 3 o 4 senza utilizzare un loop (di qualsiasi tipo) o una tabella dati.
La scadenza per le iscrizioni è 23:59, ora degli Stati Uniti orientali, di lunedì 17 agosto .
11 agosto 2020: C'è stata un po' di confusione su alcuni aspetti della sfida. Vediamo se riesco a chiarire le cose:
- Per tagliatoMean , pctLo E pctCiao sono valori frazionari limitati sotto da 0 e sopra da 0,5. Se, ad esempio, pctLo = 0,23, viene rimosso il 23% dei valori dalla coda inferiore.
- Per elencoContiene , Se elencoIn = {"ABCD","DEFG", "GHIJ"} e valueString = "D", quindi viene restituito [4,1,.].
- Per applyFunction , Entrambi elencoIn E argList sono argomenti per ecc . La differenza principale è questa elencoIn non sarà mai vuoto, ma argList potrebbe essere vuoto. Ad esempio, se elencoIn = {"ABCD","DEFG","GHIJ"} e ecc = Contiene , Poi argList dovrebbe essere un elenco che contiene almeno una sottostringa da cercare. Se ecc = Lunghezza , Tuttavia, argList sarebbe vuoto. Nei casi in cui ecc può essere applicato ai singoli elementi, farlo. Ad esempio, se ecc = Car , invece di restituire l'elenco citato, cita i singoli elementi dell'elenco.
Spero che questo renda le cose più chiare. In caso contrario, per favore fatemelo sapere.

La sfida di questo mese diventa meta.
BlogJMPRi: Sfida 5Scusate tutti. Le cose sono state davvero impegnative per me e questa sfida si è rivelata più complicata di quanto mi aspettassi. Ho quasi finito di scrivere e dovrei avere qualcosa entro la fine della settimana. Si spera, una nuova sfida poco dopo.
Ri: Sfida 5Qualche novità al riguardo?
Ri: Sfida 5Grazie!
Ri: Sfida 5@David_Burnham Supponevo il 2°.
Ri: Sfida 5Giusto il tempo forse per stringere un'ultima domanda.ArgList - è un elenco di argomenti o un elenco JMP effettivo:
applyFunction(inList,fn,a,b,c,flag)
O
applyFunction(inList,fn,{a,b,c},flag)
Se non ho tue notizie, presumo che possa essere entrambe le cose!
Ri: Sfida 5Nessun problema! Questo aiuta a chiarire i problemi legati al tentativo di farlo. Aggiungiamo un flag come ultimo argomento a applyFunction per indicare se deve essere applicato in termini di elenco o di elementi.
applyFunction ( inList , ecc , argList , bandiera )
Ri: Sfida 5Questo è perfettamente chiaro e sono felice di lavorare con questi presupposti.
Tuttavia (scusate!) mi viene subito in mente un contro-scenario: le funzioni JMP Concatena elementi e contiene elaborare interi elenchi anziché singoli elementi.E mentre vorrei Somma da applicare all'intera lista, vorrei Girare da applicare agli elementi.(Non potremmo avere un parametro flag per indicare se la funzione opera a livello di lista o a livello di singoli elementi).
Scusa ancora, mi sento come se fossi un dolore.
Ri: Sfida 5Grazie Davide,
Usiamo le seguenti ipotesi:
- ecc è una stringa.
- elencoIn è una lista composta interamente da numeri o interamente da stringhe. Se i numeri, ecc eseguirà la sua operazione sull'intero vettore dei valori di input. Se carattere, eseguirà l'operazione sui singoli elementi.
- L'ordine in cui compaiono gli argomenti argList è lo stesso ordine in cui essere utilizzato ecc .
Spero che questo renda le cose un po' più chiare. Ancora una volta, in caso contrario, fatemelo sapere.
Ri: Sfida 5Grazie per i chiarimenti Don.Per applyFunction, is ecc espresso come una stringa?Se ecc può essere qualsiasi funzione, come facciamo a sapere se può essere applicata o meno ai singoli elementi? - applyFunction vede semplicemente il nome di una funzione come parametro di input, non sa cosa è in grado di fare la funzione?E se ElencoIn è una lista di numeri, allora avrebbe senso sommare l'intera lista, ma in alternativa ogni elemento potrebbe essere una lista, nel qual caso potrebbe avere senso restituire una lista di somme.