我似乎无法理解Advanced R 中的以下示例。
x <- data.frame(matrix(runif(5 * 1e4), ncol = 5))
medians <- vapply(x, median, numeric(1))
y <- as.list(x)
cat(tracemem(y), "\n")
#> <0x7f80c5c3de20>
for (i in 1:5) {
y[[i]] <- y[[i]] - medians[[i]]
}
#> tracemem[0x7f80c5c3de20 -> 0x7f80c48de210]:
Run Code Online (Sandbox Code Playgroud)
我不明白为什么在这种情况下会创建一个副本,因为“如果一个对象绑定了一个名称,R 将就地修改它”,而引用的对象y确实只y绑定了一个名称。