gpt4 book ai didi

r - 在 R 中填充矩阵

转载 作者:行者123 更新时间:2023-12-05 08:53:46 26 4
gpt4 key购买 nike

我正在尝试使用此代码用行向量 (1,0) 填充 (500,2) 矩阵的某些行,最后一行是验证结果:

data<-matrix(ncol=2,nrow=500)
data[41:150,]<-matrix(c(1,0),nrow=1,ncol=2,byrow=TRUE)
data[41:45,]

但是结果是

> data[41:45,]
[,1] [,2]
[1,] 1 1
[2,] 0 0
[3,] 1 1
[4,] 0 0
[5,] 1 1

代替

> data[41:45,]
[,1] [,2]
[1,] 1 0
[2,] 1 0
[3,] 1 0
[4,] 1 0
[5,] 1 0

(1) 我做错了什么?

(2)为什么结果中的行索引不是41、42、43、44、45?

最佳答案

您正在尝试填充矩阵的一部分,因此您要放入其中的 block 应该具有正确的大小:

 data[41:150,]<-matrix(c(1,0),nrow=110,ncol=2,byrow=TRUE)
# nrow = 110, instead of 1 !!!!

否则,您要添加的部分将恢复为矢量并按列添加。例如,试试这个:

 data[41:150,] <- matrix(c(1,2,3,4,5), nrow=5, ncol=2, byrow=TRUE)
data[41:45,]
[,1] [,2]
[1,] 1 1
[2,] 3 3
[3,] 5 5
[4,] 2 2
[5,] 4 4

可以提示吗?是的,现在。不,因为 R 的行为与记录的一样(矩阵是具有维度属性的向量,并且回收适用于向量)。是的,因为虽然回收很方便,但它可能会产生错误的期望。

为什么行索引不是 41,42,43,...?我不知道,这就是矩阵和向量的行为方式。

> (1:10)[5:6]
[1] 5 6

(注意输出中有 [1],而不是 [5]。)

数据帧的行为不同,因此您会看到切片的原始行号:

 as.data.frame(data)[45:50,]

关于r - 在 R 中填充矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52810813/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com