【发布时间】:2015-06-20 18:09:42
【问题描述】:
我注意到R 将索引从存储在全局环境中的for 循环中保留下来,例如:
for (ii in 1:5){ }
print(ii)
# [1] 5
运行循环后人们对这个索引有任何需求吗?
我从不使用它,并且不得不记住在我运行的每个循环之后添加rm(ii)(首先,因为我很想保持我的命名空间干净,其次是为了记忆,因为我有时会遍历 @ 列表987654325@--在我的代码中,我有 357MB 的虚拟变量在浪费空间)。
有没有一种简单的方法来解决这个烦恼?
Perfect 将是一个全局选项来设置(a la options(keep_for_index = FALSE);类似 for(ii in 1:5, keep_index = FALSE) 的东西也可以接受。
【问题讨论】:
-
这根本不是一个愚蠢的问题——我最初的反应是考虑使用
lapply或类似的家庭函数。这并不总是可行的,但对于很多任务来说通常更可取。 -
当然;但是,例如,我的一个 for 循环运行 200 行。定义一个函数来执行循环所做的事情只是为了避免 for 循环似乎有点古怪
-
350 兆只来自循环的索引变量?你怎么解释?你是用 r 语言用 r 编程还是用 c 语言用 r 编程?
-
我不知道第二个问题是什么意思。但我基本上是在运行稳健性检查——对不同的子样本进行相同的统计分析——循环不同的数据集对我来说似乎很自然。
-
@MichaelChirico - 如果您正在处理
dt1dt2dt3命名为data.tables,我不禁觉得您应该使用data.tables 的列表和lapply将您的函数添加到列表的每个部分。据我所知,:=将通过引用更新列表中的data.tables。