mapply переработка аргументов - PullRequest
5 голосов
/ 24 июля 2010

Я написал функцию, которая преобразует число в базе 10 в другую базу (меня интересуют только базы 2 - 9). Мои текущие функции для преобразования базы 10 в базу 2 выглядят так:

cb2 <- function(num){
    td<-{}
    a <- {}
    while (num 2 > 0 ){
        a <- num %% 2
        td <- paste(td,a, sep="")
        num <- as.integer(num / 2)              
    }   
    return(td)  
} 

И использование будет:

sapply(1:10, cb2)

Я хотел бы обобщить эту функцию и включить предпочтительную базу (ы) в качестве аргументов функции, ала ...

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)  
}

Если меня интересует только одно число, преобразованное в базу 2-10, все хорошо:

mapply(convertbase, 10, 2:10)

Однако, если я хочу получить цифры 1:10 для базы 2:10, я сталкиваюсь с проблемами:

mapply(convertbase, 1:10, 2:10)
Warning message:
In mapply(convertbase, 1:10, 2:10) :
  longer argument not a multiple of length of shorter

В идеале эта функция или набор функций должны возвращать фрейм данных с отдельными столбцами для базы 2-10, но я понимаю, что что-то не хватает между моим кодом и целью. Любая помощь будет оценена.

1 Ответ

9 голосов
/ 24 июля 2010

mapply применяет функцию к каждой строке, тогда как мне кажется, что вы хотите применить функцию ко всем комбинациям числа и основания. Это делает трюк:

outer(1:10,2:9,Vectorize(convertbase))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...