【问题标题】:Insert value into matrix using an equation in R使用 R 中的方程将值插入矩阵
【发布时间】:2019-01-15 19:41:47
【问题描述】:

我需要使用方程式将值插入到 R 中的矩阵中。每次我这样做时,我都会收到错误“下标越界”。

编辑:这是我尝试的结果

例如: matrix["60","70"] = 1 在矩阵中名为"60" 的行、名为"70" 的列中输入1 的值

matrix[lakes[k],lakes2[k]] = 1 给了我错误

我已经仔细检查过,lakes[k]lakes2[k] 分别给了我6070。我尝试将"" 放在lakes[k]lakes2[k] 周围。

> k=2
> lakes[k]
[1] 70
> lakes2[k]
[1] 60
> lakes_matrix[lakes[k],lakes2[k]] = 1
Error in `[<-`(`*tmp*`, lakes[k], lakes2[k], value = 1) : 
  subscript out of bounds
> lakes_matrix["70","60"] =1
> lakes_matrix
     25 63 1567 40 50 60 70 80
25   NA NA   NA NA NA NA NA NA
63   NA NA   NA NA NA NA NA NA
1567 NA NA   NA NA NA NA NA NA
40   NA NA   NA NA NA NA NA NA
50   NA NA   NA NA NA NA NA NA
60   NA NA   NA NA NA NA NA NA
70   NA NA   NA NA NA  1 NA NA
80   NA NA   NA NA NA NA NA NA

【问题讨论】:

  • 你能发布正确的 R 代码来展示你的尝试吗?
  • 谢谢!成功了!

标签: r matrix


【解决方案1】:

当您使用方括号表示法进行子集化时,R 解释您​​的命令的方式会有所不同,具体取决于您传递的是 character 类型的值还是 numeric 类型的值。在您的第一个示例中,您传入 2 个 character 类型的值

lakes_matrix["70","60"]

这将返回 named "70" 行和 named "60" 列的单元格的值。它通过rownames(lakes_matrix)colnames(lakes_matrix) 搜索匹配项

但是,在您的第二个示例中,您的向量 lakes 具有 numeric 类型的值(您可以看到这一点,因为它们打印时周围没有引号)。所以这两个语句是相同的

lakes_matrix[lakes[k],lakes2[k]] 
lakes_matrix[70, 60] 

当您提供数字时,R 子集按 index。所以它试图返回第 70 行和第 60 列的值。由于 lakes_matrix 只有 8 行 8 列,因此该值不存在,并返回 subscript out of bounds 错误。


您可以使用as.characterlakes 的值更改为输入character

【讨论】:

    猜你喜欢
    • 2020-10-09
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    相关资源
    最近更新 更多