Votre dernière mission consistait à trouver la fonction locf
(qui remplace les NA
par la dernière valeur connue) la plus compacte possible (étant bien entendu, comme d'habitude, que les espaces, les indentations et les retours à la ligne ne sont pas considérés comme des caractères). L’exemple que je vous ai donné était le suivant :
> x <- 10:20 > x[5:6] <- NA > locf(x) [1] 10 11 12 13 13 13 16 17 18 19 20 >
Ce faisant, j’ai commis une petite erreur : j’aurais dû préciser que locf
devrait aussi faire ça :
> x <- 10:20 > x[c(1:2, 5:6)] <- NA > locf(x) [1] NA NA 12 13 13 13 16 17 18 19 20 >
En tenant compte de cet oubli de ma part, vous êtes deux à remporter ce 4ème ChallengeR avec un corps de fonction d’à peine 34 caractères.
La première solution est de @dickoah :
locf = function(x) { x[cummax((!is.na(x)) * 1:length(x))] }
La seconde, qui présente l'avantage de traiter les NA
en début de vecteur, nous est proposée par @navarre_julien :
locf = function(x) { i = !is.na(x) c(NA, x[i])[cumsum(i)+1] }
Notez que, pour répondre strictement à mon énoncé (et donc sans supporter les NA
en début de vecteur), on pouvait raccourcir la version de Julien comme suit :
locf = function(x) { i = !is.na(x) x[i][cumsum(i)] }
La fonction locf
idéale est donc quelque chose du genre :
locf = function(x) { if(is.matrix(x)) { res <- apply(x, 2, locf) } else { i <- !is.na(x) res <- c(NA, x[i])[cumsum(i)+1] } res }
Bravo à tous les deux ! Voici donc ChallengeR, 5ème du nom.
Votre mission, si vous l’acceptez, consiste à coder le tricheur parfait dans mon petit tournois d’algos pour un dilemme du prisonnier répété. Vous devez concevoir une fonction de la forme :
msp = function(p, o, n = 2000) { # faire quelque chose... return(res) }
De telle sorte qu’elle pulvérise tous les records en trichant vilement. Edit : Tout le code est accessible sur Github.
Heya i'm for the first time here.D.
RépondreSupprimerI hope to give something back and help others like you aided me. D.
RépondreSupprimerPlease let me know where you got your theme. Cheers D.
RépondreSupprimerSummer has always been my favorite season. I feel happier. D.
RépondreSupprimer
RépondreSupprimerI'm definitely enjoying the information. D.