【问题标题】:Error creating matrix in r在 r 中创建矩阵时出错
【发布时间】:2011-08-01 13:36:40
【问题描述】:

我正在尝试在 R 中创建一个 256*256 矩阵。我想的简单任务...如果我创建这样的数据

aa=1:65536
z = matrix(bb,nrow=256,ncol=256,byrow=T)

我有我想要的矩阵,例如

     [,1] [,2] [,3] [,4] [,5] 
[1,]    1    2    3    4    5 

等等。但是,我不是在创建“aa”数据,而是读取它,以便

aa = read.table("myfile.txt",header=F)
> aa[c(1:10),]
[1] 1513.708 1513.971 1514.067 1513.971 1513.875 1513.622 1513.524 1513.578 1513.577 1513.481

当我读取 aa 时,数据看起来不错,但是当我尝试将其转换为矩阵时,矩阵读取为

     [,1]          [,2]          [,3]          [,4]          [,5] 
[1,] Numeric,65536 Numeric,65536 Numeric,65536 Numeric,65536 Numeric,65536 

等等。知道为什么会这样吗?

非常感谢您的帮助!

【问题讨论】:

  • 你是如何“把它变成矩阵”的。我猜你没有使用 data.matrix() 这本来是正确的方法。在我看来,您遍历了它并创建了一个列表矩阵。
  • aa是什么类? (试试class(aa))。
  • @DWin 你是正确的。这就是我创建矩阵的方式。感谢您的回答,我意识到这不是这样做的方法。我将来会使用 data.matrix 。 @Joris Meys 班级是data.frame
  • 猜对了。那么@DWins 的答案是正确的。 (或者您可以使用as.matrix(),但对于因素,它具有不同的默认行为。)

标签: r matrix


【解决方案1】:

请注意?read.table 的“内存使用”部分中的这一段:

 ‘read.table’ is not the right tool for reading large matrices,
 especially those with many columns: it is designed to read _data
 frames_ which may have columns of very different classes.  Use
 ‘scan’ instead for matrices.

当然,您的 256x265 矩阵不是,但scan 似乎仍然更合适。

aa <- matrix(scan("myfile.txt"), nrow=256, ncol=256, byrow=TRUE)

【讨论】:

    【解决方案2】:

    尝试将sep="" 参数设置为read.table()。使用 sep 参数,您可以定义文件的分隔符,您可以定义哪些分隔符以及如何在 ?read.file 中找到。如果有任何其他问题,请发表评论。

    编辑:你能复制粘贴一些你正在阅读的文件吗?

    【讨论】:

    • 我刚刚意识到做z=matrix(aa[c(1:65536),],nrow=256,ncol=256,byrow=T) 解决了这个问题,虽然我不太清楚为什么我需要指定aa[c(1:65536),]
    • 我们不需要您使用的代码,而是您文件的一部分来查看格式,例如文件的前 100 个字符
    • 抱歉,我在完成之前的评论之前按了 Enter。
    • 没问题。有趣的是,你现在有 65536 列。那是你想要的吗? (另请注意,: 是完整的范围语法,您可以删除 c()
    • 感谢大家提供的非常有帮助的 cmets。很明显,我犯了很多错误,现在我知道如何在将来避免。
    猜你喜欢
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多