Я использую expand.grid из ряда переменных, но есть некоторые особые случаи, которые можно исключить. Поиск показал, что expand.grid не может этого сделать, но фильтры могут быть добавлены, так что вот моя попытка.
a = 1:5
b = 1:5
c = 0:3
d = 1:5
e = 1:3
df = expand.grid(a,b,c,d,e)
colnames(df)[c(1:5)] <- c("a","b","c","d","e");
df$d = ifelse(df$c == 0, d[[1]], df$d);
df$e = ifelse(df$c == 0, d[[1]], df$e);
df = unique(df)
В этом случае переменные d и e не используются, если c равно 0, поэтому я использую ifelse, чтобы установить d и e в первое значение d и e, если c = 0, а затем удалить дублирующиеся строки с уникальным.
Код выше действительно работает, так что с ним не так. Это слишком конкретно c.
Мне не нравятся 2 оператора ifelse для определенных c переменных. Что делать, если у меня есть 100 условных переменных. Как можно сжать оператор и, возможно, записать все условия или переменные, зависящие от какого-либо одного условия, только в одну строку.
Я также приветствую любые другие оптимизации для выполнения желаемой задачи с минимальным кодированием для сложного сценария ios. Спасибо.
Обновление
Что касается количества переменных, я просто не знаю до времени выполнения. Мой пример - очень простой случай. Очень часто я получаю отличные решения, но те, которые работают только для конкретного примера c, а не для настоящей проблемы.
У меня нет наборов от a до e или я знаю, сколько наборов или размер наборы у меня есть до времени выполнения. a может быть списком папок, списком вложенных папок, c файлами. но если файлы маленькие пустые или что-то еще, мне не нужно делать e и f.
Идеальное решение не смотрит на какие-либо значения stati c, такие как:
expand .grid (list_of_variables, key_variables = key_values, list_of_dependents)
Да, это выходит за рамки этого вопроса, но я просто хочу сказать, что решение должно работать с наборами данных, которые не были известны во время кодирования .
Надеюсь, это прояснит некоторые вещи вместо того, чтобы просто поднимать больше вопросов.