将随机位置的字符元素添加到R中的列表中

时间:2016-05-23 14:34:39

标签: r

我在R中有一个列表:

cls <- list(S1 = c("Start", "K1", "K2", "K1", "Buy"),
        S2 = c("Start", "K1", "K3", "K3", "K2", "Defer"),
        S3 = c("Start", "K1", "K2", "K2", "K3", "Defer"),
        S4 = c("Start", "K1", "K3", "K3", "K1", "Defer"))

现在我要添加&#34; K2&#34;在&#34;开始&#34;之间的随机位置中的两个元素和&#34;购买&#34; /&#34;推迟&#34;。

到目前为止我的方法:选择在哪里添加&#34; K2&#34;:

set.seed(1234)
idx <- sample(4, 2)
[1] 1 2

所以我想在第1行和第2行插入。为了确定位置,我做了这个:

a <- sapply(cls, length)
set.seed(1234)
lapply(a, FUN=function(x) x-sample(1:x-1, 1))
$`1`
[1] 4

$`2`
[1] 2

所以现在我有一个列表,用于添加(1和2)中的元素以及这些行(4和2)中的位置。

我发现来自包insert的{​​{1}}可能很有用,但我无法弄清楚如何在不使用循环的情况下应用它。这个

R.utils

适用于我想要插入的第一个元素。如何将插入功能应用于我的所有列表项?

1 个答案:

答案 0 :(得分:1)

我认为你几乎就在那里 - 它只需要重新安排你已经拥有的部分。而不是对所有位置进行采样,然后对每个位置的位置进行采样,然后插入,对每个位置进行采样并插入一步:

randinsert <- function(z) {
   pos <- sample(2:(length(z)-1),size=1)
   return(R.utils::insert(z,ats=pos, values="K2"))
}

现在lapply()此功能到选定的位置:

cls[idx] <- lapply(cls[idx],randinsert)