R:错误:`c_across()` 只能在 dplyr 动词内部使用

Adr*_*ian 2 r dplyr

library(tidyverse)
nsource <- 5
mydata <- structure(list(p1 = c(0.153603238035774, 0.251732841184133), 
                         p2 = c(0.0108935803858148, 0.12041117307058), 
                         p3 = c(0.712158280629968, 0.257556345715588), 
                         p4 = c(0.0529741150781822, 0.17690785400165), 
                         p5 = c(0.0703707858702605, 0.193391786028049)), 
                    row.names = 1:2, class = "data.frame")

mydata <- mydata %>% 
  rowwise %>%
  mutate(P = sample(1:nsource, size = 1, replace = TRUE, 
                    prob = c_across(matches('^p\\d+$')))) %>% 
  ungroup
> Error: `c_across()` must only be used inside dplyr verbs.
Run Code Online (Sandbox Code Playgroud)

我有一个数据集mydata

         p1         p2        p3         p4         p5
1 0.1536032 0.01089358 0.7121583 0.05297412 0.07037079
2 0.2517328 0.12041117 0.2575563 0.17690785 0.19339179 
Run Code Online (Sandbox Code Playgroud)

其中每行包含 5 个概率,总和为 1。我想从 1:5 的概率 p1:p5 中采样一个名为“P”的数字。但是,运行上面的代码会出现错误“c_across()只能在 dplyr 动词内部使用”。

akr*_*run 5

使用nsourceas 5,它可以工作

library(dplyr)
nsource <- 5
mydata %>%
   rowwise %>%
   dplyr::mutate(P = sample(1:nsource, size = 1, replace = TRUE, 
       c_across(matches('^p\\d+$')))) %>%
   ungroup
Run Code Online (Sandbox Code Playgroud)

-输出

# A tibble: 2 x 6
     p1     p2    p3     p4     p5     P
  <dbl>  <dbl> <dbl>  <dbl>  <dbl> <int>
1 0.154 0.0109 0.712 0.0530 0.0704     3
2 0.252 0.120  0.258 0.177  0.193      4
Run Code Online (Sandbox Code Playgroud)

OP代码的问题可能与plyr::mutate屏蔽有关dplyr::mutate

mydata %>% 
+   rowwise %>%
+   plyr::mutate(P = sample(1:nsource, size = 1, replace = TRUE, 
+                     prob = c_across(matches('^p\\d+$'))))
Error: `c_across()` must only be used inside dplyr verbs.
Run `rlang::last_error()` to see where the error occurred.
Run Code Online (Sandbox Code Playgroud)

补救措施是在仅加载的dplyr::mutate新会话中指定或执行此操作Rdplyr