Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将数据帧中的行复制到R中的矩阵?_R_Matrix_Row_Frame - Fatal编程技术网

如何将数据帧中的行复制到R中的矩阵?

如何将数据帧中的行复制到R中的矩阵?,r,matrix,row,frame,R,Matrix,Row,Frame,在Microsoft Open R 3.3中,如何将数据库查询中的一行(返回数据帧)复制到矩阵中的一行?我知道我可以一个元素一个元素地做,但我应该能够一次复制一行。但我不能: > m = matrix(0, nrow=2, ncol=3) > dim(m) [1] 2 3 > dim(m[1,]) NULL > f = dbGetQuery("SELECT id, name, age FROM users") > dim(f) [1] 300 3 > dim(

在Microsoft Open R 3.3中,如何将数据库查询中的一行(返回数据帧)复制到矩阵中的一行?我知道我可以一个元素一个元素地做,但我应该能够一次复制一行。但我不能:

> m = matrix(0, nrow=2, ncol=3)
> dim(m)
[1] 2 3
> dim(m[1,])
NULL
> f = dbGetQuery("SELECT id, name, age FROM users")
> dim(f)
[1] 300 3
> dim(f[1,])
[1] 1 3
> m[1,] = f[1,]
> m[1,]
Error in m[1, ] : incorrect number of dimensions
> dim(m)
NULL
> m[1,] = f[1,]
Error in m[1, ] = f[1, ] : 
  incorrect number of subscripts on matrix
将f转换为as.matrix(f)没有帮助

为什么dim(m[1,])是“NULL”而不是“13”

为什么m[1,]=f[1,]第一次破坏了m的数据结构(将dim(m)更改为NULL),但直到第二次才报告错误


我怀疑这与数据帧行可以包含不同的类型有关,而矩阵行不能。帧的一列是字符数据,而其他列是整数。

您应该能够在取消列出
f[1,]
后分配值,因为
f[1,]
返回一行数据帧,这是一个列表,
m[1,]
返回一个原子向量,这回答了为什么dim(m[1,])“NULL”而不是“13”的问题?因为一维原子向量没有维度属性。尝试将列表分配给原子向量会导致问题:

m = matrix(0, nrow=2, ncol=3)
f = data.frame(x = 1:3, y = 2:4, z = 3:5)
m
#     [,1] [,2] [,3]
#[1,]    0    0    0
#[2,]    0    0    0
m[1,] = unlist(f[1,])
m
#     [,1] [,2] [,3]
#[1,]    1    2    3
#[2,]    0    0    0

class(m[1,])
#[1] "numeric"
class(f[1,])
#[1] "data.frame"

m[1,]只是一个数值向量。如果要保留维度,请首先阅读
?'['
,并注意“drop”参数的使用。该结构没有“损坏”。您只是误解了输出。我说该结构损坏是因为它内部失去了维度。dim(m)在该赋值之后而不是之前返回NULL。现在编辑以将该信息添加到问题中。我们不知道到目前为止提供的证据中
f
是一个数据帧。您应该提供
dput(f[1,]