Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.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 将矩阵转换为data.table的最快方法_R_Data.table - Fatal编程技术网

R 将矩阵转换为data.table的最快方法

R 将矩阵转换为data.table的最快方法,r,data.table,R,Data.table,将如下矩阵转换为data.table的最快方法是什么 mat <- matrix(1:9, nrow = 3) 1 2 3 4 5 6 7 8 9 但是这是最快的方式吗?我们可以在不首先将其转换为data.frame的情况下执行此操作吗?您可以使用magrittr管道: mat <- matrix(1:9, nrow = 3) %>% data.table() 这里有一些例子来讨论形成data.table的速度,即as.data.table,setDT(as.data.f

将如下矩阵转换为data.table的最快方法是什么

mat <- matrix(1:9, nrow = 3)

1 2 3
4 5 6
7 8 9

但是这是最快的方式吗?我们可以在不首先将其转换为data.frame的情况下执行此操作吗?

您可以使用
magrittr
管道:

mat <- matrix(1:9, nrow = 3) %>% data.table()

这里有一些例子来讨论形成
data.table
的速度,即
as.data.table
setDT(as.data.frame(mat))
setDT(data.frame(mat))

  • 当行数小于列数时:

谢谢你,马特!您知道如何在不使用data.table以外的包的情况下转换它吗?我更新了答案,将
data.table()
而不是
as.data.frame()
,但是您需要
magrittr
才能使用
%>%
。哈哈,谢谢!我认为我必须使用setDT()而没有考虑data.table()。谢谢你,马特!没问题!如果答案解决了您的问题,请随意单击绿色复选标记接受答案抱歉,由于速度比较,我不得不接受其他答案。但愿我能接受这两个。但是我真的很感谢你花时间回答这个问题。哇,这太棒了!有趣的是,行和列的相对数量改变了这两个函数的速度。谢谢你的详细回答!为什么不作为.data.frame而不是data.frame?@jangorecki谢谢!我只是用OP的方法来比较。我在基准测试中添加了
as.data.frame
,这样您就可以看到update@johnc请查看我的最新答案,似乎
setDT(as.data.frame(mat))[]
是迄今为止最快的。请注意,data.table中有一个专用的C函数,它应该可以大大减少as.matrix.data.table方法的时间。有关状态,请参阅
mat <- matrix(1:9, nrow = 3) %>% data.table()
mat <- data.table(matrix(1:9, nrow = 3)) 
mat <- matrix(1:5e3, nrow = 5)
microbenchmark(unit = "relative",
               as.data.table(mat),
               setDT(as.data.frame(mat))[],
               setDT(data.frame(mat))[])

Unit: relative
                        expr      min       lq     mean   median       uq      max neval
          as.data.table(mat) 1.433084 1.417747 1.340552 1.413278 1.414386 1.070289   100
 setDT(as.data.frame(mat))[] 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000   100
    setDT(data.frame(mat))[] 1.287526 1.281964 1.237544 1.284735 1.258662 1.186977   100
mat <- matrix(1:5e3, nrow = 5e2)
microbenchmark(unit = "relative",
               as.data.table(mat),
               setDT(as.data.frame(mat))[],
               setDT(data.frame(mat))[])

Unit: relative
                        expr      min       lq     mean   median       uq      max neval
          as.data.table(mat) 1.114003 1.041410 1.083238 1.070029 1.049262 1.254732   100
 setDT(as.data.frame(mat))[] 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000   100
    setDT(data.frame(mat))[] 1.680208 1.467538 1.482018 1.511009 1.479438 1.440440   100