是否可以!!!像這樣使用:
dplyr::count(df, rlang::`!!!`(rlang::syms(variables)))
代替:
dplyr::count(df, !!!syms(variables))
編輯:
這不可能。
所以現在問題變成了使用的替代方法是!!!什么?
uj5u.com熱心網友回復:
rlang我們可以使用all_ofwith ,而不是使用across
library(dplyr)
df %>%
count(across(all_of(variables)))
uj5u.com熱心網友回復:
在被rlang呼叫UQ()和UQS()(取消參考和取消參考拼接)中有軟棄用的函式。但它們也不應該rlang::在前面使用。
簡而言之,只需使用!!!.
但這里有一個你要問的例子。
df <- mtcars
variables <- c("cyl", "gear")
dplyr::count(df, rlang::UQS(syms(variables)))
如果你這樣做,它會沖你大喊大叫。
Warning message:
Prefixing `UQS()` with the rlang namespace is deprecated as of rlang 0.3.0.
Please use the non-prefixed form or `!!!` instead.
# Bad:
rlang::expr(mean(rlang::UQS(args)))
# Ok:
rlang::expr(mean(UQS(args)))
# Good:
rlang::expr(mean(!!!args))
這是摘錄自help("nse-force").
從 rlang 0.3.0 開始,不推薦使用 rlang 命名空間限定符呼叫 UQ() 和 UQS()。只需使用不合格的形式:
# Bad rlang::expr(mean(rlang::UQ(var) * 100)) # Ok rlang::expr(mean(UQ(var) * 100)) # Good rlang::expr(mean(!!var * 100))支持命名空間限定符會使取消參考的實作復雜化,并且會誤導取消參考運算子(它們是在參考時運行而不是在評估時呼叫函式的語法運算子)的性質。
UQ() 和 UQS() 在 rlang 0.2.0 中被軟棄用,以便使 quasiquotation 的語法更加一致。前綴形式現在是`!!`() 和`!!!`() 這與其他R 運算子一致(例如` `(a, b) 是a b 的前綴形式)。
請注意,前綴形式不像以前那樣相關,因為 !! 現在具有正確的運算子優先級,即與一元 - 或 相同。因此將它與其他運算子混合是安全的,例如 !!a !!b 做正確的事情。此外,決議器現在在未參考的運算式周圍去掉一層括號。這樣 (!!"foo")(...) 擴展為 foo(...)。這些更改使前綴形式不太有用。
最后,命名的函式形式 UQ() 和 UQS() 具有誤導性,因為它們表明關于函式的現有知識適用于準報價。rlang 匯出的這些函式的可見定義以及將 rlang::UQ() 解釋為 !! 的整潔 eval 決議器加強了這一點。實際上,取消參考不是函式呼叫,而是一種語法操作。運算子形式更清楚地表明取消參考是特殊的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/391170.html
