我想用诸如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)
或等价
答案 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$i
或expand.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