根据两个向量的元素,使用purrr Modify2修改向量

问题描述 投票:0回答:1

我正在尝试基于两个条件,使用两个不同的向量和purrr::modify2来修改向量中的值,语法还不正确,因此无法在网上找到示例。这是mwe:

library(tidyverse)
library(magrittr)
arr1 <- c(6, 2, 3, 2, 1, 5, 4, 2, 3, 7)
arr2 <- c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
prob <- c(0.65, 0.45)

arr1 %<>% modify2(arr1,
                  arr2,
                  ~ if (.x == 2 & .y == 0) ~ rbinom(1,1,prob[1]) * 2
                  else
                       if (.x == 2 & .y != 0) ~ rbinom(1,1,prob[2]) * 2)

我试图让它找到何时.x == 2.y == 0(两个数组中的索引相同),然后将.x中的2替换为rbinom(1,1,prob[1]) * 2生成的值,我认为应该为0还是2?然后,如果.x == 2.y != 0,则使用不同的概率替换arr1中的值。我还希望对每个条目分别进行rbinom计算,如果这有意义吗?我是否需要使用function (x) ......表示法对每个实例求值?显然,最简单和/或更优雅的解决方案受到欢迎。谢谢。 J

r arrays tidyverse purrr
1个回答
1
投票

一种可能的解决方案是使用case_when

arr1 <- modify2(arr1, arr2, ~dplyr::case_when(
  .x == 2 && .y == 0 ~ rbinom(1,1,prob[1]) * 2,
  .x == 2 && .y != 0 ~ rbinom(1,1,prob[2]) * 2,
  TRUE ~ .x ))

请注意,您不需要%<>%;您已经传递了arr1作为第一个参数,因此您只需将结果分配回标准<-

© www.soinside.com 2019 - 2024. All rights reserved.