R语言 函数中带“env”的data.table编程

wf82jlnq  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(163)

我对在函数中联接两个data. table感兴趣。但是,当使用新的env对data.table进行编程时,我无法在函数中联接data. table,因为我试图联接的参数不存在,例如,我得到了一个“参数指定列接收到不存在的列”的错误。我如何通过编程提供匹配的列来连接两个数据?我提供了一个令人惊讶的失败的最小工作示例。

dt.mwe.1 <- data.table(a = c(1,2,3,4,0,10))

mwe_function = function(dt, merge_var){
  dt.internal = 
    data.table(z = min(dt):max(dt)) %>% 
    .[ , .(mv = z) , env = list(mv = merge_var)] %>% `[`
  dt.internal2 = 
    data.table(z = min(dt):max(dt)) %>% 
    .[ , .(mv = z) , env = list(mv = merge_var)] %>% `[`
  dt.internal
  dt.internal[dt.internal2, on = .(mv), 
              env = list(mv = merge_var)] %>% `[`
}
# fails
mwe_function(dt = dt.mwe.1, merge_var = "a")
# also fails
mwe_function(dt = dt.mwe.1, merge_var = a)
kpbwa7wx

kpbwa7wx1#

也许我没理解你的意思,但是关于:

mwe_function = function(dt, merge_var){
  dt.internal = 
    data.table(z = min(dt):max(dt)) %>% 
    .[ , .(mv = z) , env = list(mv = merge_var)] %>% `[`
  dt.internal2 = 
    data.table(z = min(dt):max(dt)) %>% 
    .[ , .(mv = z) , env = list(mv = merge_var)] %>% `[`
  dt.internal
  dt.internal[dt.internal2, on = merge_var] %>% `[`
}

mwe_function(dt = dt.mwe.1, merge_var = "a")

#         a
#     <int>
#  1:     0
#  2:     1
#  3:     2
#  4:     3
#  5:     4
#  6:     5
#  7:     6
#  8:     7
#  9:     8
# 10:     9
# 11:    10

?data.table的帮助下:

env: List or an environment, passed to ‘substitute2’ for
         substitution of parameters in ‘i’, ‘j’ and ‘by’ (or ‘keyby’).
         Use ‘verbose’ to preview constructed expressions.

所以我猜env方法对on参数不起作用,但是它无论如何都接受字符串作为输入。

相关问题