在 data.table 中,我如何向 c() 提供一个字符向量,其中一些是显式的,另一些是通过引用提供的?

In data.table how can I supply a vector of characters to c() with some explicitly and others by reference?

以正常的脚本方式,我有一个 data.table 标题:

Date | Time | Value

然后将 DateTime 粘贴在一起,稍后将解析为 POSIX。

问题在于尝试将过程参数化(我认为这是正确的词)到一个函数中,我不能保证 Date 将始终明确 "Date"。它可以很容易地是 dateDATErdate(出于某种原因),或者任何东西。

现在我的函数产生:

Date | Time | Value | DateTime

.. 但正如我所提到的,DateTime 很容易成为 rDateTimeTimeValue 是在别处设置的,不会改变。

EDIT 目前该函数从函数输入中捕获实际字符串。

function(hhDT, colDate = "rdate")

问题是:

setcolorder 中,列 headers 在 c() 函数中作为字符提供,如下所示:

setcolorder(fooDT, c("col1", "col2", "col3",....))

什么是 'correct' 向 c() 提供参数的方法,当参数部分已知且部分由用户定义时, 并在字符 object 中捕获colDate?

setcolorder(fooDT, c(colDate, "Time", result of paste(colDate, "Time"), "Value"))

其中 colDate 是用参数 colDate 引用的字符串,而 结果 ... 是该伪代码的结果,即 rDateTimedateTimerandomstringTime.

列位置是否不变?如果是这样,你应该使用它。
如果您不能确定它们将来会保持不变,您可以轻松地将 Time 位置作为第 2 列和 Value 位置作为第 3 列的检查。如果有任何不正确的只是提出错误。
不要关注 setcolorder,而是关注 c 以生成预期的字符向量。
您的解决方案几乎可以正常工作,您可以将 paste 嵌套在 c:

mysetcolorder <- function(DT, colDate){
    stopifnot(is.data.table(DT), is.character(colDate), colDate %in% names(DT))
    setcolorder(DT, c(colDate, "Time", paste0(colDate, "Time"), "Value"))
}

如果它不能回答您的问题,您可以为明天的 R 用户组带一台笔记本电脑,我们会让它工作并更新答案:)