假设我在 R 中创建了一个列表并按如下方式 append 到它:
x = list(10)
x[[2]] = 20
这是否相当于
x = list(10)
x = list(10, 20)
?我对 R 如何处理内存中的列表的特定细节没有多少经验,但我有限的理解是它倾向于复制快乐;对我来说最理想的是第一个选项本质上不涉及在内存中创建另一个列表,而只会导致在内存中为 append 值留出一个新位置。从本质上讲,如果我有一个很大的列表,如果我只想在其中 append 一些内容,我不希望 R 制作另一个副本。
如果我想要的行为不是这里给出的,还有其他方法可以获得预期的效果吗?
最佳答案
我相当有信心答案是“不”。我使用以下代码进行仔细检查:
Rprof(tmp <- tempfile(), memory.profiling = TRUE)
x <- list()
for (i in 1:100) x[[i]] <- runif(10000)
Rprof()
summaryRprof(tmp, memory = "stats")
unlink(tmp)
输出:
# index: runif
# vsize.small max.vsize.small vsize.large max.vsize.large
# 76411 381781 424523 1504387
# nodes max.nodes duplications tot.duplications
# 2725878 13583136 0 0
# samples
# 5
相关部分是
duplications = 0
.
关于r - append 到 R 中的列表会导致复制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12772522/