一次搞懂 R 語言中的 !、!! 與 !!!:從邏輯否定到動態變數展開

更新 發佈閱讀 5 分鐘

在 R 語言中,感嘆號 ! 不只是邏輯運算子,當它變成兩個或三個時,更是資料處理與動態程式設計的神器。特別是在 dplyr 與 rlang 這類進階套件中,!! 與 !!! 能幫助我們靈活地操作變數與參數。這篇文章將帶你一步步搞懂它們的差異與用法。

單重感嘆號 !:邏輯否定

最基礎的用法,就是用來表示「否定」,例如 !TRUE 會回傳 FALSE,是條件判斷中的常見運算符。

!TRUE   # FALSE
!FALSE # TRUE

雙重感嘆號 !!優勢

雙重感嘆號 最常用在 自定義函數的動態操作欄位 , 過去傳統寫法的痛點,無法動態操作欄位

🎯 情境:寫一個可以計算平均值的函數

❌ 一般傳統寫法(會出問題)

my_mean <- function(data, col) {
data %>%
summarise(mean_value = mean(col))
}
my_mean(mtcars, mpg)

👉 問題:col 被當成「普通變數」,而不是資料框中的欄位,結果會錯或報錯。

Error in `summarise()`: ℹ In argument: `mean_value = mean(col)`. Caused by error: ! 找不到物件 'mpg' Run `rlang::last_trace()` to see where the error occurred.

😓 傳統可運行寫法(很醜)

my_mean <- function(data, col_name) {
data %>%
summarise(mean_value = mean(.data[[col_name]]))
}
my_mean(mtcars, "mpg")

👉 問題:必須用字串 "mpg",可讀性差,不符合 dplyr 的語法風格,寫起來不直覺

⚡ 使用 !!:優雅解決「動態欄位」問題

library(dplyr)
library(rlang)

# 改寫後
my_mean <- function(data, col) {
data %>%
summarise(mean_value = mean(!!enquo(col)))
}
my_mean(mtcars, mpg)
my_mean(mtcars, hp)

#動態 group_by
my_summary <- function(data, group_var, target_var) {
data %>%
group_by(!!enquo(group_var)) %>%
summarise(mean_value = mean(!!enquo(target_var)))
}

my_summary(mtcars, cyl, mpg)
my_summary(mtcars, gear, hp)

👉 !! 的核心價值,讓你可以用「欄位名稱」而不是字串,寫出可重複使用的函數

enquo(col)   # 先把欄位「包起來」
!! # 再把它「打開來用」

三重感嘆號 !!!優勢

雖然雙重!!很好用,但仍有其限制,一次只能計算一個統計值,而三重感嘆號可以同時計算多個統計量,其實最白話意思 !!! = 把一個 list 裡的東西「拆開丟進函數」

❌ 一般傳統寫法(寫死)

mtcars %>%
summarise(
mean_mpg = mean(mpg),
sd_mpg = sd(mpg),
max_mpg = max(mpg)
)

👉 問題:每個統計量都要手寫,無法根據需求動態調整,不適合寫函數。

🚀 使用 !!!:動態展開多個參數

✅ 改寫後(動態生成)

library(purrr)

funs <- list(
mean = mean,
sd = sd,
max = max
)

mtcars %>%
summarise(
!!!imap(funs, ~ set_names(list(.x(mtcars$mpg)), paste0(.y, "_mpg")))
)
--------------------------------------
mean sd max
1 20.09062 6.026948 33.9

總結:三個驚嘆號的本質差異

vocus|新世代的創作平台




留言
avatar-img
慵懶貓系的小墨魚:數據外的日常觀察
3會員
50內容數
小墨魚,一位白天擅長資料分析與統計建模的數據工作者,夜裡則沉浸在書本與文字裡,透過閱讀與寫作與世界對話。工作之餘,也兼職統計家教,協助學生理解複雜的統計概念與軟體操作。這裡記錄我的書評、生活觀察、科技碎念,有時也寫下關於時間與情緒的小片段。願這些文字,成為我們在日常中相遇的溫柔片刻。
2025/10/30
在資料分析中,分群分析(Cluster Analysis)是一種常見的無監督學習(Unsupervised Learning)方法,用來探索資料中的自然群集結構。當我們沒有標籤資料、也不知道該分成幾群時,分群分析能幫助我們發現潛在的分類邏輯。 在眾多分群方法中,階層式分群分析(Hierarchic
Thumbnail
2025/10/30
在資料分析中,分群分析(Cluster Analysis)是一種常見的無監督學習(Unsupervised Learning)方法,用來探索資料中的自然群集結構。當我們沒有標籤資料、也不知道該分成幾群時,分群分析能幫助我們發現潛在的分類邏輯。 在眾多分群方法中,階層式分群分析(Hierarchic
Thumbnail
2025/10/21
在上一篇文章中,我們一起漫步於機率分布的世界,認識了像常態分布、二項分布、柏松分布這些基礎卻無比重要的「地標」。它們是統計學的基石,描述了數據世界中最常見的幾種規律。 然而,機率的宇宙浩瀚無垠。有讀者朋友提醒,我們還錯過了許多同樣璀璨的星辰。今天,就讓我們再次啟程,探索另外10個關鍵的機率分布:伽
Thumbnail
2025/10/21
在上一篇文章中,我們一起漫步於機率分布的世界,認識了像常態分布、二項分布、柏松分布這些基礎卻無比重要的「地標」。它們是統計學的基石,描述了數據世界中最常見的幾種規律。 然而,機率的宇宙浩瀚無垠。有讀者朋友提醒,我們還錯過了許多同樣璀璨的星辰。今天,就讓我們再次啟程,探索另外10個關鍵的機率分布:伽
Thumbnail
2025/10/16
探討奧卡姆剃刀哲學原則,解釋其在資料科學和機器學習中如何轉化為「模型簡約原則」,以及闡述「過度擬合」現象。文章介紹了AIC和BIC兩個量化模型簡約的統計工具,並提供從哲學思維到實際應用的全面指南。
Thumbnail
2025/10/16
探討奧卡姆剃刀哲學原則,解釋其在資料科學和機器學習中如何轉化為「模型簡約原則」,以及闡述「過度擬合」現象。文章介紹了AIC和BIC兩個量化模型簡約的統計工具,並提供從哲學思維到實際應用的全面指南。
Thumbnail
看更多
你可能也想看
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
這兩天重聽 Maria João Pires 演奏的蕭邦《夜曲》,心裡一直覺得鋼琴高音有點黯淡,泛音不夠自然,線條略顯模糊。起初以為是錄音問題,但仔細比對後才發現,真正的關鍵其實是 DAC 的濾波模式設定。 平常我習慣在人聲或小編制素材中使用 NOS 模式(Non-Oversampling
Thumbnail
這兩天重聽 Maria João Pires 演奏的蕭邦《夜曲》,心裡一直覺得鋼琴高音有點黯淡,泛音不夠自然,線條略顯模糊。起初以為是錄音問題,但仔細比對後才發現,真正的關鍵其實是 DAC 的濾波模式設定。 平常我習慣在人聲或小編制素材中使用 NOS 模式(Non-Oversampling
Thumbnail
百貨公司的開門時間是十點,但我的一天從七點就開始了。從江南搭地鐵到東大門,剛好一個小時。我總是擠進車廂,站在角落裡,戴著耳機,假裝自己融入了這個城市的日常。地鐵窗玻璃映出那些平靜的面孔,看起來和我的一樣毫無波瀾,可只有我知道,內心深處像有一根弦,被拉得緊緊的,時刻要斷卻又一直撐著。
Thumbnail
百貨公司的開門時間是十點,但我的一天從七點就開始了。從江南搭地鐵到東大門,剛好一個小時。我總是擠進車廂,站在角落裡,戴著耳機,假裝自己融入了這個城市的日常。地鐵窗玻璃映出那些平靜的面孔,看起來和我的一樣毫無波瀾,可只有我知道,內心深處像有一根弦,被拉得緊緊的,時刻要斷卻又一直撐著。
Thumbnail
Hi there,距離第一張專輯已經好久的 SZA,終於在今年結束之前釋出了他的第二張個人專輯《SOS》(2022),並且在專輯發行的第一週就強勢空降美國 Billboard 200 專輯榜的冠軍,並且也在 Spotify 的串流方面也有很驚人的數據,可以說這次的專輯效應非常成功啊,在聖誕節
Thumbnail
Hi there,距離第一張專輯已經好久的 SZA,終於在今年結束之前釋出了他的第二張個人專輯《SOS》(2022),並且在專輯發行的第一週就強勢空降美國 Billboard 200 專輯榜的冠軍,並且也在 Spotify 的串流方面也有很驚人的數據,可以說這次的專輯效應非常成功啊,在聖誕節
Thumbnail
Hi there,近期我被吳卓源 Julia 在去年釋出的〈the one〉(2022) 燒到不行!它來自 Julia 的新專輯《IDFK》(2022)。〈the one〉是他專輯的第三波主打,其實一開始我就很想寫這首歌了,不過看 Julia 在各大螢光幕的動向,感覺很有可能會出 MV,所以
Thumbnail
Hi there,近期我被吳卓源 Julia 在去年釋出的〈the one〉(2022) 燒到不行!它來自 Julia 的新專輯《IDFK》(2022)。〈the one〉是他專輯的第三波主打,其實一開始我就很想寫這首歌了,不過看 Julia 在各大螢光幕的動向,感覺很有可能會出 MV,所以
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News