Saya mencoba mengubah nilai dalam vektor, berdasarkan dua kondisi menggunakan dua vektor berbeda dan purrr::modify2, belum mendapatkan sintaks yang benar dan tidak dapat menemukan contoh di web. Ini dia:

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)

Saya mencoba menemukannya ketika .x == 2 dan .y == 0 (indeks yang sama di kedua array), lalu ganti 2 di .x dengan nilai yang dihasilkan oleh rbinom(1,1,prob[1]) * 2, yang menurut saya harus 0 atau 2? Kemudian jika .x == 2 dan .y != 0, gunakan probabilitas yang berbeda untuk mengganti nilai di arr1. Saya juga ingin perhitungan rbinom dilakukan secara individual untuk setiap entri, apakah itu masuk akal? Apakah saya perlu menggunakan notasi function (x) ...... untuk mengevaluasi setiap instance? Solusi yang jelas lebih sederhana dan/atau lebih elegan sangat disambut. Terima kasih. J

0
Jim Maas 28 Mei 2020, 20:08

1 menjawab

Jawaban Terbaik

Salah satu solusi potensial adalah dengan menggunakan 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 ))

Perhatikan bahwa Anda tidak memerlukan %<>%; Anda sudah meneruskan arr1 sebagai argumen pertama, jadi Anda cukup menetapkan kembali hasilnya dengan <- standar.

1
Artem Sokolov 29 Mei 2020, 16:00