在函数中重复一个参数

时间:2016-08-02 13:23:00

标签: r list arguments repeat

我有一个列表l和一个整数n。我想将l n - 时间传递给expand.grid

有没有比用expand.grid(l, l, ..., l) n次写l更好的方法?

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果@Phann的解决方案不适合您的情况,您可以尝试以下&#34; evil trio&#34;溶液:

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 = ","), ")")))

答案 2 :(得分: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)

答案 3 :(得分: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