首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将矩阵数字的类别强制转换为整数

无法将矩阵数字的类别强制转换为整数
EN

Stack Overflow用户
提问于 2012-09-08 06:46:04
回答 5查看 7K关注 0票数 11

我在R中编写了一个邻接矩阵,如下所示:

代码语言:javascript
复制
neighbours <- array(0, c(100,100))
for (i in 1:100) { neighbours[i,i] = 1 }    #reflexive

但随后我注意到class(neighbours)double matrix。对于更大的矩阵,这会占用太多的空间。所以我想强制类型为integer,或者更好,因为这是无定向的,logical

但是..。

代码语言:javascript
复制
> class(neighbours[5])
[1] "numeric"
> class(neighbours[5]) <- "integer"
> class(neighbours[5])
[1] "numeric"

这不是听我说!

EN

回答 5

Stack Overflow用户

发布于 2012-09-08 07:29:34

最好不要一开始就将其初始化为数字,但如果您不能这样做,请设置storage.mode

代码语言:javascript
复制
R> neighbours <- array(0, c(100,100))
R> for (i in 1:100) { neighbours[i,i] = 1 }
R> str(neighbours)
 num [1:100, 1:100] 1 0 0 0 0 0 0 0 0 0 ...
R> storage.mode(neighbours) <- "integer"
R> str(neighbours)
 int [1:100, 1:100] 1 0 0 0 0 0 0 0 0 0 ...
R> storage.mode(neighbours) <- "logical"
R> str(neighbours)
 logi [1:100, 1:100] TRUE FALSE FALSE FALSE FALSE FALSE ...
票数 9
EN

Stack Overflow用户

发布于 2015-01-18 00:59:16

对于那些仍然在寻找一种方法将现有的数字矩阵强制转换为整数一的人:

代码语言:javascript
复制
m2 <- apply (m, c (1, 2), function (x) {
  (as.integer(x))
  })

c(1,2)表示将函数应用于行和列。测试元素的类,然后给出:

代码语言:javascript
复制
> class(m2[1,])
[1] "integer"
> class(m[1,])
[1] "numeric"
> 

我正在寻找这样的东西,因为我需要转换一个已经存在的数值矩阵。这是一个非常慢的计算的结果,所以修改代码比简单地转换结果要花费我更多的时间。

票数 5
EN

Stack Overflow用户

发布于 2012-09-08 06:57:14

也许我遗漏了一些东西,但为什么不直接将其声明为逻辑数组呢?

代码语言:javascript
复制
neighbors <- array(FALSE, c(100,100))
diag(neighbors) <- TRUE

将两者进行比较:

代码语言:javascript
复制
> object.size(array(0, c(100,100)))
80200 bytes
> object.size(array(FALSE, c(100,100)))
40200 bytes

编辑:我很有兴趣知道为什么逻辑数组每个条目占用4B空间……

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12326366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档