У меня есть список l
и целое число n
. Я хотел бы пройти l
n
-times до expand.grid
.Повторить аргумент в функции
Есть ли лучший способ, чем писать expand.grid(l, l, ..., l)
с n раз l
?
У меня есть список l
и целое число n
. Я хотел бы пройти l
n
-times до expand.grid
.Повторить аргумент в функции
Есть ли лучший способ, чем писать expand.grid(l, l, ..., l)
с n раз l
?
Функция rep
похоже делает, что вы хотите.
n <- 3 #number of repetitions
x <- list(seq(1,5))
expand.grid(rep(x,n)) #gives a data.frame of 125 rows and 3 columns
x2 <- list(a = seq(1,5), b = seq(6, 10))
expand.grid(rep(x2,n)) #gives a data.frame of 15625 rows and 6 columns
Если решение по @Phann не подходит к вашей ситуации, вы можете попробовать следующее «evil trio» решение:
l <- list(height = seq(60, 80, 5), weight = seq(100, 300, 50), sex = c("male", "female"))
n <- 4
eval(parse(text = paste("expand.grid(",
paste(rep("l", times = n), collapse = ","), ")")))
Мне это нравится, но я не думаю, что ** он отвечает на вопрос о сеттерах. Хотя вопрос о сеттерах может быть истолкован таким образом. – NJBurgo
Я думаю, самый простой способ решить оригинальный вопрос является вставьте список, используя rep
.
Например, чтобы развернуть тот же список, n раз, используйте rep, чтобы развернуть вложенный список столько раз, сколько необходимо (n
), а затем использовать расширенный список как единственный аргумент expand.grid
.
# Example list
l <- list(1, 2, 3)
# Times required
n <- 3
# Expand as many times as needed
m <- rep(list(l), n)
# Expand away
expand.grid(m)
Если функция хотел (повторно) действуют на элементы списка свободно (т.е. членов списка оторванными друг от друга из самого определенного списка), следующие будут полезны:
l <- list(1:5, "s") # A list with numerics and characters
n <- 3 # number of repetitions
expand.grid(unlist(rep(l, n))) # the result is:
Var1
1 1
2 2
3 3
4 4
5 5
6 s
7 1
8 2
9 3
10 4
11 5
12 s
13 1
14 2
15 3
16 4
17 5
18 s
Вы хотите расширить список примитивных объектов? Тогда см. Мой ответ. Список более сложных объектов можно решить с помощью ответа @ Qaswed – NJBurgo