如何在R中的n进制上执行数学运算

如何在R中的n进制上执行数学运算,r,binary,R,Binary,我想在基数3中执行一些计算,并且需要在该基数中进行加减运算。 例如,2+2在基3中应变为11在包中有一个名为digitsBase的函数进行这种转换 library(sfcmisc) digitsBase(2+2,base = 3) # Class 'basedInt'(base = 3) [1:1] # [,1] # [1,] 1 # [2,] 1 您可以使用gmppackage library(gmp) as.character(x = as.bigz(2 + 2),

我想在基数3中执行一些计算,并且需要在该基数中进行加减运算。
例如,2+2在基3中应变为11在包中有一个名为digitsBase的函数进行这种转换

library(sfcmisc)
digitsBase(2+2,base = 3)

# Class 'basedInt'(base = 3) [1:1]
#      [,1]
# [1,]    1
# [2,]    1

您可以使用
gmp
package

library(gmp)
as.character(x = as.bigz(2 + 2), b = 3)
#[1] "11"
或者编写自己的函数。我修改了一个


如果要将数字从一个基数转换为另一个基数,可以创建以下函数。在此,可以将数字从基数2转换为基数36,再转换为基数2转换为基数36:

baseconverter <- function(number,baseGiven,baseRequire){
  result = c()
  if(baseRequire >36 || baseRequire<2 || baseGiven>36 || baseGiven<2){
    return ("CustomError:Base is not proper")
  }

  Letters = LETTERS[seq( from = 1, to = 26 )]
  numbers = 0:9
  L = c(numbers,Letters)
  rm(numbers)
  rm(Letters)
  number = substring(number,1:nchar(number),1:nchar(number))


  convertToAlpha <- function(a) {
    return(L[a+1])
  }
  alphaToDecimal <- function(a){
    k = match(x = a , table = L )
    return(k-1)
  }

  tempNum = 0
  for (i in rev(number)){
    digit = alphaToDecimal(i)
    if(digit >= baseGiven || digit < 0){
      return ("CustomError:Number is not proper")
    }
    tempNum = (tempNum*baseGiven) + digit
  }

  while(tempNum > baseRequire - 1){
    result = c(convertToAlpha(tempNum - (baseRequire * floor(tempNum/baseRequire))),result)
    tempNum = floor(tempNum/baseRequire)
  }
  result=c(tempNum,result)
  return(paste(result,collapse = ""))
}
希望能有帮助

foo(dec_n = 2+2, base = 3)
#[1] "11"
baseconverter <- function(number,baseGiven,baseRequire){
  result = c()
  if(baseRequire >36 || baseRequire<2 || baseGiven>36 || baseGiven<2){
    return ("CustomError:Base is not proper")
  }

  Letters = LETTERS[seq( from = 1, to = 26 )]
  numbers = 0:9
  L = c(numbers,Letters)
  rm(numbers)
  rm(Letters)
  number = substring(number,1:nchar(number),1:nchar(number))


  convertToAlpha <- function(a) {
    return(L[a+1])
  }
  alphaToDecimal <- function(a){
    k = match(x = a , table = L )
    return(k-1)
  }

  tempNum = 0
  for (i in rev(number)){
    digit = alphaToDecimal(i)
    if(digit >= baseGiven || digit < 0){
      return ("CustomError:Number is not proper")
    }
    tempNum = (tempNum*baseGiven) + digit
  }

  while(tempNum > baseRequire - 1){
    result = c(convertToAlpha(tempNum - (baseRequire * floor(tempNum/baseRequire))),result)
    tempNum = floor(tempNum/baseRequire)
  }
  result=c(tempNum,result)
  return(paste(result,collapse = ""))
}
baseconverter(number = 2+2 , baseGiven = 10 , baseRequire = 3)