为什么在从Map返回时会复制data.table

ims*_*msc 5 r mapply data.table

我明白data.table从函数返回时不会被复制.但是,在这种特殊情况下,它会被复制.可以解释一下原因吗?

dt1 <- data.table(a=1)
dt2 <- data.table(b=1)
dt3 <- data.table(c=1)

address(dt1); address(dt2); address(dt3)
[1] "000000005E20D990"
[1] "00000000052301E8"
[1] "000000001D622210"

l <- list(a=dt1, b=dt2, c=dt3)
address(l$a); address(l$b); address(l$c)
$[1] "000000005E20D990"
$[1] "00000000052301E8"
$[1] "000000001D622210"

f <- function(dt) {setnames(dt, toupper(names(dt)))}
l <- Map(f, l)
address(l$a); address(l$b); address(l$c)
$[1] "000000001945C7B0"
$[1] "0000000066858738"
$[1] "000000001B021038"

dt1
$   A
$1: 1
dt2
$   B
$1: 1
dt3
$   C
$1: 1
Run Code Online (Sandbox Code Playgroud)

所以这是制作副本的最后一行.但是,以下内容不进行复制.

address(dt1)
$[1] "000000005E20D990"
dt4 <- f(dt1)
address(dt4)
$[1] "000000005E20D990"
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

更新 正如每个人都指出mapmapply正在制作副本.lapply适用于上述情况,但我的实际代码需要函数中的多个输入.我的理解是所有apply函数都使用相同的代码.但似乎并非如此.

jan*_*cki 0

正如每个人都指出的那样,Map或者mapply正在复制。