r - 如何正确表示 4 位整数?
问题描述
我需要将矩阵转换为十六进制文件输出。矩阵中的每个条目都需要转换为 4 位十六进制数字 (8) 并输出为一维数组。
> matrix(c(0,0,0,5,0,0,5,5,0,0,5,0),nrow=3,ncol=4,byrow=T)
[,1] [,2] [,3] [,4]
[1,] 0 0 0 5
[2,] 0 0 5 5
[3,] 0 0 5 0
这是一个 3 行 4 列的矩阵,大部分为 0,部分为 5。我想要的输出应该类似于
#> as.raw(c(0,8,0,136,0,128))
> as.raw(solution)
[1] 00 08 00 88 00 80
我试图做一些简单的
> sidewaysraw<-as.raw(ifelse(mymat==5, 8,0))
但是 ifelse 中的 8 当然是一个 16 位整数,所以它总是一个 0x08。我没有看到将 55s 转换为 0x88s、05s 转换为 0x08s 和 50s 转换为 0x80s 的巧妙方法......
有没有一种平滑的方法可以让 R 使用 4 位整数?
解决方案
似乎您可以做一些矩阵乘法来提供帮助。首先我们可以定义一个“平移矩阵”
digits <- matrix(c(128,8,0,0,0,0,128,8), nrow=4, ncol=2)
然后你可以得到你的号码
(dd==5) %*% digits
# [,1] [,2]
# [1,] 0 8
# [2,] 0 136
# [3,] 0 128
然后用转置以正确的顺序提取它们
as.raw(t((dd==5) %*% digits))
# [1] 00 08 00 88 00 80
这应该是有效的,并且不会打扰字符串操作。
推荐阅读
- typescript - TypeScript webpack 构建不包括 node_modules
- git - 在 .git/* 上执行 dos2unix 后损坏的 git repo
- php - Symfony 4 单一形式的多个实体
- c++ - 构造函数的参数包类型不适用于vector.emplace_back
- python - 如何使用数据库中的文本作为用户名和密码进行身份验证?
- neo4j - 如何在 Neo4j DB 中找到小于最大值的所有路径?
- c# - 在加载对话框时在后台从数据库中检索数据
- swift - 在 facebook 上分享分享对话框
- angular - 将Routerlink传递给子组件
- jenkins - 詹金斯根据参数发送电子邮件通过/失败更改