динамический цикл для генерации комбинаций в R - PullRequest
0 голосов
/ 06 декабря 2018

Предположим, у меня есть 2 переменные, "a" и "b".Мне нужно создавать всевозможные комбинации от «0,1 до 0,1» вплоть до «до 0,3 до 0,3».Я легко могу сделать это с помощью рекурсивного вложенного цикла в R..

A =1
for (i in seq(0.1, 0.3 , by = 0.1)) {
  for (j in seq(0.1, 0.3, by = 0.1)) {
    for (k in seq(0.1, 0.3, by = 0.1)) {
      B = paste("a", i , "b", j, "c",k)
      A = c(A, B) 
    }
  }
}
A = A[-1]
A
> A
 [1] "a 0.1 b 0.1 c 0.1" "a 0.1 b 0.1 c 0.2" "a 0.1 b 0.1 c 0.3" "a 0.1 b 0.2 c 0.1" "a 0.1 b 0.2 c 0.2" "a 0.1 b 0.2 c 0.3"
 [7] "a 0.1 b 0.3 c 0.1" "a 0.1 b 0.3 c 0.2" "a 0.1 b 0.3 c 0.3" "a 0.2 b 0.1 c 0.1" "a 0.2 b 0.1 c 0.2" "a 0.2 b 0.1 c 0.3"
[13] "a 0.2 b 0.2 c 0.1" "a 0.2 b 0.2 c 0.2" "a 0.2 b 0.2 c 0.3" "a 0.2 b 0.3 c 0.1" "a 0.2 b 0.3 c 0.2" "a 0.2 b 0.3 c 0.3"
[19] "a 0.3 b 0.1 c 0.1" "a 0.3 b 0.1 c 0.2" "a 0.3 b 0.1 c 0.3" "a 0.3 b 0.2 c 0.1" "a 0.3 b 0.2 c 0.2" "a 0.3 b 0.2 c 0.3"
[25] "a 0.3 b 0.3 c 0.1" "a 0.3 b 0.3 c 0.2" "a 0.3 b 0.3 c 0.3"
> 

Но что если мои переменные (a, b) и мой диапазон (от 0,1 до 0,3) являются динамическими?Есть ли метод динамической генерации для циклов?Или есть лучший способ решить эту проблему?

1 Ответ

0 голосов
/ 06 декабря 2018

Использование -

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"

Объяснение

var1, var2var3 были разработаны только для примера.

Используйте expand.grid() для передачи list для таких переменных, как vars.

vars может содержать list переменных, из которых вы динамически генерируете комбинации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...