我正在尝试基于两个条件,使用两个不同的向量和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
一种可能的解决方案是使用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
作为第一个参数,因此您只需将结果分配回标准<-
。