r - append 到 R 中的列表会导致复制吗?

标签 r list append

假设我在 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/

相关文章:

jquery - 在 jquery 中 append 输入复选框

python - 对百分比列表进行排序

jquery - 追加后,没有jquery效果

r - 根据大写字母 (R) 拆分字符串

替换数据框中列中的随机值

r - R中的二进制分组

r - 在ggplot2中设置binwidth

C++ 迭代器访问下一个元素进行比较

python - 如何在python中基于数组对列表进行子集化

python - 在python中将数组拆分为两个较小的数组