Функция Matlab uint8 в R - PullRequest
       78

Функция Matlab uint8 в R

0 голосов
/ 24 февраля 2020

Как я мог сгенерировать uint8 объект в R с похожей характеристикой, которую я мог получить из функции uint8 в Matlab? Я пробовал эту ссылку на github, но результат другой. Например:

R :
b02 <- as.uint8(  2)
b0a <- as.uint8( 10)
bff <- as.uint8(255)

bff + b0a
[1] 9
bff/b0a
[1] 25
b02 ^ b0a
[1] 0

is.numeric(bff)
[1] FALSE
> class(bff)
[1] "uint8"

str(b02)
 'uint8' raw 02
str(b02)
 'uint8' raw 02
str(bff)
 'uint8' raw ff

Matlab :

b02=uint8(  2)
b02 =
  uint8
   2
>> b0a =uint8( 10)
b0a =
  uint8
   10
>> bff =uint8(255)
bff =
  uint8
   255

bff + b0a
ans =
  uint8
   255
bff/b0a
ans =
  uint8
   26
b02 ^ b0a 
ans =
  uint8
   255
isnumeric(bff)
ans =
  logical
   1
>> strcmp(class(bff),'uint8')
ans =
  logical
   1

class(b02)
ans =
    'uint8'
>> class(b0a)
ans =
    'uint8'
>> class(bff)
ans =
    'uint8'

1 Ответ

2 голосов
/ 24 февраля 2020

Кажется маловероятным, что решение проблемы, как указано, поможет вам в достижении вашей конечной цели. В R наиболее близким к uint8 является формат raw. Это может быть преобразовано в любой другой тип данных, который вы выберете, поэтому лучше научиться работать с ним.

Для полноты, стоит отметить, что с объектно-ориентированной системой R3 S3 очень легко определите свой собственный класс uint8. Вот чрезвычайно упрощенный пример, который может принимать числа c или необработанные данные и выполнять простую арифметику c, как и ожидалось.

uint8 <- function(x)
{
  if(class(x) == "uint8") x <- unclass(x)
  if(is.raw(x)) x <- as.integer(x)
  if(is.numeric(x)) x <- as.integer(x)
  if(!is.integer(x)) stop("uint8 only takes numeric or raw types")

  if(any(x >= 256 | x < 0)) stop("uint8 numbers must be between 0 and 255")
  x <- floor(x)
  class(x) <- "uint8"
  return(x)
}

print.uint8 <- function(x) print(as.raw(x))

b02 <- uint8(  2)
b0a <- uint8( 10)
bff <- uint8(255)

b02
#> [1] 02

b0a
#> [1] 0a

b02 + b0a
#> [1] 0c

bff / b02
#> [1] 7f

Создано в 2020-02-24 с помощью Представить пакет (v0.3.0)

...