【问题标题】:Using lapply to replace values in a list from randomly sampled values from another list使用 lapply 从另一个列表的随机采样值替换列表中的值
【发布时间】:2022-11-30 21:28:14
【问题描述】:

我正在尝试替换列表中的值单词, 在列表指定的索引上职位,通过对存在于名为字母.

这是我的列表的示例:

word <- c("A","E","C","A","R","O","P")

positions <- c(1,5,3,7)

letters <- c("A","B","C","D","E","F")

一个重要的细节是单词[位置]采样后不应保持不变,这可能是由于中的值重叠而发生的字母和单词

我用来执行此操作的当前代码是:

for (i in 1:length(positions)){
  temp <- word[[positions[i]]] 
  word[[positions[i]]] <- sample(letters, 1)
  while (word[[positions[i]]] == temp) {
    word[[positions[i]]] <- sample(letters, 1) 
  }
}

虽然这行得通,但我意识到它的效率极低,因为我更改列表中值的顺序并不重要。我一直在尝试使用“应用”函数族来解决这个问题,但我无法找到解决方案。

非常感谢您的关注!

【问题讨论】:

    标签: r list for-loop apply lapply


    【解决方案1】:

    你可以这样做:

    word[positions] <- sapply(word[positions], 
                              (w) sample(setdiff(letters, w), 1))
    

    在 sapply 中,您始终会从 letters 中删除当前单词,因此可以保证另一个单词是 sampled。

    另请注意,letters 是一个内置的 R 常量(包含小写英文字母,请参阅?letters),因此将此名称用于用户定义变量通常不是一个好主意。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-20
      • 2021-06-16
      • 1970-01-01
      • 2020-01-26
      • 1970-01-01
      • 2019-04-10
      • 2019-02-10
      • 1970-01-01
      相关资源
      最近更新 更多