使用R中的方程将值插入矩阵

时间:2019-01-15 19:41:48

标签: r matrix

我需要使用公式将值插入R中的矩阵。每次这样做,都会出现错误“下标超出范围”。

编辑:这是我尝试的结果

例如: matrix["60","70"] = 1在矩阵中名为1的行"60"的行中放入"70"的值{p}

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

1 个答案:

答案 0 :(得分:2)

当您使用括号表示法子集时,R解释命令的方式将根据您传递的类型为character还是类型为numeric而有所不同。在第一个示例中,您传入了两个character

类型的值
lakes_matrix["70","60"]

这将返回命名 "70"行和命名 "60"列的单元格值。这样,它会在rownames(lakes_matrix)colnames(lakes_matrix)中搜索匹配项

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

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

提供数字时,按索引表示R个子集。因此,它尝试返回第70行和第60列的值。由于lakes_matrix只有8行8列,因此该值不存在,并且会返回subscript out of bounds错误。


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