【问题标题】:Matlab function uint8 in RR中的Matlab函数uint8
【发布时间】:2020-06-08 11:55:10
【问题描述】:

如何在 R 中生成具有与 uint8 中的 uint8 函数类似的特征的 Matlab 对象?我试过thisgithub链接,但结果不一样。例如:

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'

【问题讨论】:

  • 你试过mmap包吗?
  • @AliHadjihoseini 是的,没用!
  • 您需要的具体行为是什么。只是你需要这些数字在添加时不要溢出吗?
  • @MrFlick 我想要与 Matlab 函数完全相似的东西,因为我正在尝试从数据库中读取序列化数据,我有一个用于淡化数据的 Matlab 脚本,我希望能够做到它在 R 中。
  • @MrFlick 添加也不是除法时唯一的区别,Matlab 和 R 的行为也不同!

标签: r matlab binary uint8array


【解决方案1】:

解决上述问题似乎不太可能帮助您实现最终目标。在 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 package (v0.3.0) 于 2020 年 2 月 24 日创建

【讨论】:

  • 0uint8 的有效值,您的第 8 行不应该是:if(any(x &gt;= 256 | x &lt; 0)) stop("uint8 numbers must be comprised between 0 and 255") 吗?
  • 是的@Hoki。我会改变它。老实说,这不是任何人都会实际使用的实现(我希望),更多的是证明创建 uint8 是可能的,但在 R 中完全是多余的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多