在 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
然后将 Date
和 Time
粘贴在一起,稍后将解析为 POSIX。
问题在于尝试将过程参数化(我认为这是正确的词)到一个函数中,我不能保证 Date
将始终明确 "Date"。它可以很容易地是 date
、DATE
、rdate
(出于某种原因),或者任何东西。
现在我的函数产生:
Date | Time | Value | DateTime
.. 但正如我所提到的,DateTime
很容易成为 rDateTime
。 Time
和 Value
是在别处设置的,不会改变。
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 引用的字符串,而 结果 ... 是该伪代码的结果,即 rDateTime
或 dateTime
或 randomstringTime
.
列位置是否不变?如果是这样,你应该使用它。
如果您不能确定它们将来会保持不变,您可以轻松地将 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 用户组带一台笔记本电脑,我们会让它工作并更新答案:)
以正常的脚本方式,我有一个 data.table 标题:
Date | Time | Value
然后将 Date
和 Time
粘贴在一起,稍后将解析为 POSIX。
问题在于尝试将过程参数化(我认为这是正确的词)到一个函数中,我不能保证 Date
将始终明确 "Date"。它可以很容易地是 date
、DATE
、rdate
(出于某种原因),或者任何东西。
现在我的函数产生:
Date | Time | Value | DateTime
.. 但正如我所提到的,DateTime
很容易成为 rDateTime
。 Time
和 Value
是在别处设置的,不会改变。
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 引用的字符串,而 结果 ... 是该伪代码的结果,即 rDateTime
或 dateTime
或 randomstringTime
.
列位置是否不变?如果是这样,你应该使用它。
如果您不能确定它们将来会保持不变,您可以轻松地将 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 用户组带一台笔记本电脑,我们会让它工作并更新答案:)