我有一个列表l
和一个整数n
。我想将l
n
- 时间传递给expand.grid
。
有没有比用expand.grid(l, l, ..., l)
n次写l
更好的方法?
答案 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