簡體   English   中英

R中的標准評估和非標准評估

[英]Standard evaluation and non-standard evaluation in R

我對dplyr函數的參數感到困惑,對標准評估(SE)或非標准評估(NSE)不太清楚。 我只想將變量傳遞給dplyr :: arrange(),但失敗了。 但是,傳遞給dplyr :: select()即可。

> library(dplyr)
> library(magrittr)
> var_name <- "mpg"
> mtcars %>% as_tibble() %>% dplyr::select(var_name)
# A tibble: 32 x 1
 mpg
 * <dbl>
 1  21.0
 2  21.0
 3  22.8
 4  21.4
 5  18.7
 6  18.1
 7  14.3
 8  24.4
 9  22.8
10  19.2
# ... with 22 more rows
> mtcars %>% as_tibble() %>% dplyr::arrange(var_name)
Error in arrange_impl(.data, dots) : 
  incorrect size (1) at position 1, expecting : 32

我使用SE版本搜索了一個解決方案,它可以正常工作:

> mtcars %>% as_tibble() %>% dplyr::arrange_(var_name)

為什么dplyr :: select()與NSE中的dplyr :: arrange()不同?

如何在全球環境中解決以下錯誤?

> as_tibble(mtcars) %>% dplyr::mutate(paste0(var_name,"_Minus1") = mtcars$mpg - 1)
Error: unexpected '=' in "as_tibble(mtcars) %>% dplyr::mutate(paste0(var_name,"_Minus1") ="

謝謝!

我們可以使用arrange_at來獲取對象

mtcars %>%
   as_tibble() %>%
   dplyr::arrange_at(var_name)

或者另一個選擇是從rlang轉換為帶有sym符號並用!!求值!!

mtcars %>%
   as_tibble() %>%
   dplyr::arrange(!! rlang::sym(var_name))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM