2016-08-02 3 views
0

У меня есть список l и целое число n. Я хотел бы пройти ln -times до expand.grid.Повторить аргумент в функции

Есть ли лучший способ, чем писать expand.grid(l, l, ..., l) с n раз l?

+0

Вы хотите расширить список примитивных объектов? Тогда см. Мой ответ. Список более сложных объектов можно решить с помощью ответа @ Qaswed – NJBurgo

ответ

2

Функция 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 
0

Если решение по @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 = ","), ")"))) 
+0

Мне это нравится, но я не думаю, что ** он отвечает на вопрос о сеттерах. Хотя вопрос о сеттерах может быть истолкован таким образом. – NJBurgo

0

Я думаю, самый простой способ решить оригинальный вопрос является вставьте список, используя 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) 
0

Если функция хотел (повторно) действуют на элементы списка свободно (т.е. членов списка оторванными друг от друга из самого определенного списка), следующие будут полезны:

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 
Смежные вопросы