R data.table:将向量转换为单行data.table

R data.table:将向量转换为单行data.table,r,optimization,data.table,R,Optimization,Data.table,我有一个字符向量x,我想快速地将其转换为一行data.table。命令data.table(x)返回一列data.table。现在,data.table(t(x))完成了任务,但我想知道是否有更快的方法。我们可以使用 x <- 1:5 setDT(as.list(x))[] 真正的问题是:你为什么要这样做?如果表中的每一个元素都是同一类型的,那么只有一行就没有什么意义了。你确定吗?标准的字符向量(甚至是只有一行的矩阵)似乎非常适合这种对象。@nicola这是用于绑定的。我有一个不同大小的

我有一个字符向量
x
,我想快速地将其转换为一行data.table。命令
data.table(x)
返回一列data.table。现在,
data.table(t(x))
完成了任务,但我想知道是否有更快的方法。

我们可以使用

x <- 1:5
setDT(as.list(x))[]

真正的问题是:你为什么要这样做?如果表中的每一个元素都是同一类型的,那么只有一行就没有什么意义了。你确定吗?标准的
字符
向量(甚至是只有一行的矩阵)似乎非常适合这种对象。@nicola这是用于绑定的。我有一个不同大小的向量列表,我想将其转换为data.table来分析它。如果是这种情况,您应该在转换之前
rbind
,然后再转换为
data.table
。将每行转换为
数据。表
rbind
之后再转换更糟糕。@nicola If
y
是我的字符向量列表<代码>rbindlist(lappy(y,as.list))似乎要快得多!现在我有点贪心了。我还得绕y圈-还有更快的方法吗
rbindlist
现在是我词典中的一个新函数-是否有其他函数可以在不首先将所有内容转换为列表的情况下处理此问题?我建议您问另一个问题,确切说明哪些是您的输入和所需的输出。在这一阶段,无法判断什么对您更有利。另外,
as.data.table(t(v1))
似乎速度更快(与setDT类似)非常有趣!我有几个问题:1)我对setDT()和data.table()之间区别的理解与内存分配有关。为什么setDT(as.list(x))和as.data.table(as.list(x))返回不同的东西?2) []在setDT结束时做什么?@NewNameStat不同的事情是什么意思?它们返回相同的5列(基于示例)。
[]
用于打印output@akrun正如你在回答中所说,他们都返回相同的东西。设置list_x=as.list(x),我想知道为什么setDT(list_x)和as.data.table(list_x)不返回相同的内容。前者返回一行data.table,而后者返回一列data.table。@NewNameStat再次为我返回相同的数据,即一行data.table
dim(as.data.table(list_x))#[1]15 dim(setDT(list_x))#[1]15
根据对nicola的评论,我认为您不需要转换为
data.table
。只需将其用作
列表
,然后将其放入
rbindlist
v1 <- 1:1e5
system.time(data.table(t(v1)))
#   user  system elapsed 
#  12.95    0.01   12.97 
system.time(setDT(as.list(v1)))
#  user  system elapsed 
#   5.75    0.00    5.75 

system.time(as.data.table(t(v1)))
#    user  system elapsed 
#   6.35    0.00    6.34 
 d1 <- data.table(V1= 1:3, V2= 4:6, V3=7:9)
 rbindlist(list(d1, as.list(1:3)))