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

How to copy a row from a data frame to a matrix in R?

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

> 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" 而不是 "1 3"?

为什么m[1,] = f[1,]第一次破坏了m的数据结构(将dim(m)变为NULL),第二次才报错?

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

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

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"