用于在R中生成组合的动态for循环

时间:2018-12-06 12:50:12

标签: r loops for-loop

假设我有2个变量,“ a”和“ b”。我需要生成“ a 0.1 b 0.1”一直到“ a 0.3 b 0.3”的各种组合。我可以通过在R中循环嵌套for循环来轻松做到这一点。

while True:
    pl1 = Robot()
    pl1.update() # here is the problem
    tk.update()
    time.sleep(10)

我的输出将是

A =1
for (i in seq(0.1, 0.3, by = 0.1)) {
  for (j in seq(0.1, 0.3, by = 0.1)) {
      B = paste("a", i , "b", j)
      A = c(A, B) 
  }
}
A = A[-1]
A

如果我有3个变量,则必须再添加一个for循环。

> A
[1] "a 0.1 b 0.1" "a 0.1 b 0.2" "a 0.1 b 0.3" "a 0.2 b 0.1" "a 0.2 b 0.2" "a 0.2 b 0.3" "a 0.3 b 0.1" "a 0.3 b 0.2" "a 0.3 b 0.3"

但是如果我的变量(a,b)和范围(0.1到0.3)是动态的怎么办?有没有动态生成for循环的方法?还是解决这个问题的更好方法?

1 个答案:

答案 0 :(得分:2)

使用-

var1 <- paste("a",seq(0.1, 0.3, by = 0.1),sep=" ")
var2 <- paste("b",seq(0.1, 0.3, by = 0.1),sep=" ")
var3 <- paste("c",seq(0.1, 0.3, by = 0.1),sep=" ")
vars <- list(var1,var2,var3)

do.call(paste, as.data.frame(expand.grid(vars), stringsAsFactors=FALSE))

输出

[1] "a 0.1 b 0.1 c 0.1" "a 0.2 b 0.1 c 0.1" "a 0.3 b 0.1 c 0.1" "a 0.1 b 0.2 c 0.1"
 [5] "a 0.2 b 0.2 c 0.1" "a 0.3 b 0.2 c 0.1" "a 0.1 b 0.3 c 0.1" "a 0.2 b 0.3 c 0.1"
 [9] "a 0.3 b 0.3 c 0.1" "a 0.1 b 0.1 c 0.2" "a 0.2 b 0.1 c 0.2" "a 0.3 b 0.1 c 0.2"
[13] "a 0.1 b 0.2 c 0.2" "a 0.2 b 0.2 c 0.2" "a 0.3 b 0.2 c 0.2" "a 0.1 b 0.3 c 0.2"
[17] "a 0.2 b 0.3 c 0.2" "a 0.3 b 0.3 c 0.2" "a 0.1 b 0.1 c 0.3" "a 0.2 b 0.1 c 0.3"
[21] "a 0.3 b 0.1 c 0.3" "a 0.1 b 0.2 c 0.3" "a 0.2 b 0.2 c 0.3" "a 0.3 b 0.2 c 0.3"
[25] "a 0.1 b 0.3 c 0.3" "a 0.2 b 0.3 c 0.3" "a 0.3 b 0.3 c 0.3"

说明

var1var2var3仅出于示例目的而设计。

使用expand.grid()为变量list传递vars

vars可以包含list个变量,您可以根据这些变量动态生成组合。