0

我如何生成一个具有相似特征的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'
4

1 回答 1

2

解决上述问题似乎不太可能帮助您实现最终目标。在 R 中,最接近 uint8 的是raw格式。这可以转换为您选择的任何其他数据类型,因此最好学习使用它。

为了完整起见,值得指出的是,使用 R 的 S3 面向对象系统很容易定义自己的 uint8 类。这是一个极其简化的示例,它可以采用数字或原始数据并按预期执行简单的算术。

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

reprex 包(v0.3.0)于 2020-02-24 创建

于 2020-02-24T20:55:32.483 回答