如何在熔化 data.table 时指定空 id.vars 向量?

log*_*thy 5 r melt data.table

我想融化 data.table 而不包含任何 ID 列。

dt <- data.table::data.table(iris)[1:10]
data.table::melt(dt, measure.vars=c('Petal.Length', 'Petal.Width'))
Run Code Online (Sandbox Code Playgroud)

如果不指定 id.vars,所有非measure.vars 列都将被视为id.vars。这可以在事后通过仅从熔体中选择变量/值来处理。

例如,下面的代码产生我正在寻找的输出:

data.table::melt(dt, measure.vars=c('Petal.Length', 'Petal.Width'))[,.(variable, value)]
Run Code Online (Sandbox Code Playgroud)

但我认为这应该可以在熔化呼叫本身内实现?我尝试过以下方法但没有成功。

data.table::melt(dt, measure.vars=c('Petal.Length', 'Petal.Width'), id.vars=NULL)
data.table::melt(dt, measure.vars=c('Petal.Length', 'Petal.Width'), id.vars=c())
data.table::melt(dt, measure.vars=c('Petal.Length', 'Petal.Width'), id.vars=list())
Run Code Online (Sandbox Code Playgroud)

从文档中:

如果 id.vars 和measure.vars 都丢失,则所有非数字/整数/逻辑列将被分配为id 变量,其余的将被分配为度量变量。如果仅提供 id.vars 或measure.vars 之一,则其余列将分配给另一列。id.vars 和measure.vars 都可以多次拥有同一列,并且同一列可以同时作为id 和measure 变量。

Melt.data.table 还接受 id 和measure变量的列表列。

log*_*thy 7

c()NULL是相同的(例如identical(c(), NULL) == TRUE),并且NULL是内部分配给的值id.vars是缺失时

但是,空整数或字符向量就可以解决问题:

data.table::melt(dt, measure.vars=c('Petal.Length', 'Petal.Width'), id.vars=integer())
data.table::melt(dt, measure.vars=c('Petal.Length', 'Petal.Width'), id.vars=character())
Run Code Online (Sandbox Code Playgroud)