J'ai écrit une fonction qui va transformer un nombre en base 10 en une autre base (je ne m'intéresse qu'aux bases 2 - 9). Mes fonctions actuelles pour convertir la base 10 à la base 2 ressemble à:mapply recyclage arguments
cb2 <- function(num){
td<-{}
a <- {}
while (num 2 > 0){
a <- num %% 2
td <- paste(td,a, sep="")
num <- as.integer(num/2)
}
return(td)
}
Et l'utilisation serait:
sapply(1:10, cb2)
Je voudrais généraliser cette fonction et inclure la base préférée (s) comme arguments à la fonction, ala ...
convertbase <- function(num, base){
td<-{}
a <- {}
while (num/base > 0){
a <- num %% base
td <- paste(td,a, sep="")
num <- as.integer(num/base)
}
return(td)
}
Si je ne suis intéressé par un numéro unique converti dans la base 2-10, tout va bien:
mapply(convertbase, 10, 2:10)
Cependant, si je veux chiffres 1:10 pour la base 02h10, je rencontre des problèmes:
mapply(convertbase, 1:10, 2:10)
Warning message:
In mapply(convertbase, 1:10, 2:10) :
longer argument not a multiple of length of shorter
Idéalement, cette fonction ou un ensemble de fonctions renverrait une trame de données avec des colonnes séparées pour la base 2 -10, mais je réalise qu'il manque quelque chose entre le code que j'ai et le but. Toute aide serait appréciée.
Vous n'avez pas besoin d'initialiser les variables dans R, en particulier avec des blocs de code vides. Donc 'td <- {}' et 'a <- {}' peuvent être supprimés. – mbq
Merci pour le conseil mbq - encore apprendre la structure de base de R évidemment. Je reçois l'erreur suivante si je n'instancie pas la variable td: Erreur dans le collage (a, t, sep = ""): ne peut pas forcer le type 'fermeture' à un vecteur de type 'caractère' Je suppose que c'est parce que le La fonction pousse les nouvelles valeurs sur le vecteur, similaire à "push/pop" ou "shift/unshift" dans Perl? – Chase