假设我有一个字符向量(例如foreach($followers as $follower) {
echo $follower->status;
}
),我想从该向量中随机生成myv = c('a', 'b', 'c', 'd', 'e')
对n = length(myv)
,知道:
partner1 - partner2
的1倍和partner1
的1倍; partner2
和partner1
的保存值不起作用。我没有找到一种优雅的方式(例如,使用partner2
,sample
或combn
),因此我目前使用的是丑陋的expand.grid
循环:>
for
答案 0 :(得分:2)
您可以将myv
视作一个环,并通过在%%
(不包括零)的molulo(length(myv)
)中添加一些东西来随机旋转它。 (length(myv) - 1) %% length(myv)
应该排除在外,以避免元素与自身配对。这应该分别使用任意长度的myv
和种子。
matrix(c(myv,
myv[(seq_along(myv) + sample(seq_along(myv)[- (length(myv) - 1)], 1))
%% length(myv) + 1]),
ncol=2)
然后,您可以轻松地将其包装到一个函数中。
pairOff <- function(x) {
x <- sample(x) # to get first column into random order, too
M <- matrix(c(x,
x[(seq_along(x) + sample(seq_along(x)[- (length(x) - 1)], 1))
%% length(x) + 1]),
ncol=2)
return(M)
}
屈服
> pairOff(myv)
[,1] [,2]
[1,] "d" "e"
[2,] "c" "a"
[3,] "b" "d"
[4,] "e" "c"
[5,] "a" "b"
数据
set.seed(165472)
myv <- letters[1:5]