R:list $ i变量而不是for中的i(1:10中的i)

时间:2019-05-01 11:40:56

标签: r loops for-loop

我想用诸如i之类的列表中的变量替换for(i in 1:10) { x*i }中的counter$i

我的代码中有一些for循环,有些还需要具有不同的计数变量,因为我在一个循环中有一个循环,这导致我创建了一堆变量。

我没有找到执行诸如应用版本之类的循环的不同方法,而是决定简单地“隐藏”包含每个计数器变量的列表中的所有计数器变量,例如:counter$i变量,counter$j作为第二个变量,等等。

但是for循环似乎在计数器变量中不接受$[[]]。 我有什么办法可以做到这一点?

tldr: 我想将for(i in 1:10)替换为for(counter$i in 1:10)或等价

1 个答案:

答案 0 :(得分:1)

有可能。我仍然质疑这样做的智慧。 (实际上,不要这样做,请参见下文)。要说服我很多,这样的管理循环永远是“最佳”解决方案。

parentForm.Controls.SetChildIndex (myPanel, 0) 的文档描述了用法for的for循环。

for(var in seq) expr是“变量的语法名称”。 var不是语法名称,您可以将其括在反引号中以使其成为语法名称。

counter$i

明显的缺点是您需要手动递增counter <- list(i = 1) for (`counter$i` in 1:10){ print(counter$i) counter$i <- counter$i + 1 } (或其他计数器)。

替代

是否可以使用循环中遇到的所有条件来设置数据帧?通过counter$iexpand.grid的某种组合?

通常,当我遇到可能导致嵌套循环的情况时,我会找到某种方式拆分数据,以便每个列表都是要独立执行的元素。然后,我只需要循环操作一个计数器即可。

添加

关于进一步的思考,我认为我不得不承认这实际上不是“有效”的。仅在某种意义上说,它会使迭代器模糊不清,并让用户管理器拥有自己的内部迭代器。

请注意,在循环中打印split时,如果不手动递增它,就永远不会改变。但是,在退出循环之后,如果得到对象counter$i,则得到10,即循环内部迭代器的最后一个值。

get("counter$i")

本质上,我在这里所做的是施加一个counter <- list(i = 1) for (`counter$i` in 1:10){ # always prints 1 print(counter$i) } `counter$i` > 10 get("counter$i") > 10 循环,同时牺牲了for循环控制的所有好处。它易于出错且难以调试。更糟糕的是,R已经拥有执行这种操作的控件。它称为for

我认为repeat是解决此处所需内容的正确方法。如

repeat