【发布时间】:2019-05-04 04:01:39
【问题描述】:
需要编写一个函数permn(m,n,FUN),它可以找到大小为 n 的 m 的所有排列,并返回一个由对每个排列调用 FUN 返回的值组成的向量,但很难弄清楚如何对每个排列调用 FUN。
由于我们不关心效率,我决定首先使用permutations() 函数计算所有排列,然后将排列向量传递给 FUN。但是,这仅适用于 FUN 不需要访问向量的特定索引的情况。
permn <- function(m, n, FUN=NULL) {
result <- c()
if (length(m) == 1) {
p <- permutations(length(1:m),n,1:m)
} else {
p <- permutations(length(m),n,m)
}
result <- FUN(p)
return(result)
}
如果我执行以下操作,permn(4,2,function(x){2*x}),则将 FUN 应用于矩阵中的每个元素,我得到正确的输出,即 12x2 矩阵。但是,传递一个应该返回每个排列的第一个元素的函数,例如 first <- function(z) z[1],只返回一个元素。例如,调用
permn(7:10,2,first) 应该从一个看起来像
[1] 7 7 7 8 8 8 9 9 9 10 10 10
[1,] 7 8
[2,] 7 9
[3,] 7 10
[4,] 8 7
...
而是返回7。我怎样才能使 FUN 应用于向量中的每个排列?
【问题讨论】:
-
你在使用来自
gtools包的permutations()吗? -
@andrew_reece 是的
标签: r