【r<-函數(shù)】do.call的使用

do.call這個函數(shù)是我在搜索問題時會看到別人經(jīng)常使用的一個函數(shù)厚棵,心生好奇,這次來看看它的用法蔼紧。

從文檔來看婆硬,do.call可以通過名字構建和執(zhí)行函數(shù),并且將參數(shù)以列表的形式傳入奸例。

Description

do.call constructs and executes a function call from a name or a function and a list of arguments to be passed to it.

Usage

do.call(what, args, quote = FALSE, envir = parent.frame())

Arguments

what

either a function or a non-empty character string naming the function to be called.

args

a list of arguments to the function call. The names attribute of args gives the argument names.

quote

a logical value indicating whether to quote the arguments.

envir

an environment within which to evaluate the call. This will be most useful if what is a character string and the arguments are symbols or quoted expressions.

顯然彬犯,前兩個參數(shù)很重要,確定了該函數(shù)的一般用法查吊,后兩個參數(shù)涉及一些執(zhí)行引用與環(huán)境的問題谐区,這方面我懂的不多,不過基本也用不到逻卖。

下面通過例子學習下使用宋列。

例子

# 生成一個復數(shù)序列
do.call("complex", list(imag = 1:3))
## [1] 0+1i 0+2i 0+3i

# 如果我們有一個列表(比如數(shù)據(jù)框)
# 我們需要使用c()添加更多的參數(shù)
tmp <- expand.grid(letters[1:2], 1:3, c("+", "-"))
tmp
##    Var1 Var2 Var3
## 1     a    1    +
## 2     b    1    +
## 3     a    2    +
## 4     b    2    +
## 5     a    3    +
## 6     b    3    +
## 7     a    1    -
## 8     b    1    -
## 9     a    2    -
## 10    b    2    -
## 11    a    3    -
## 12    b    3    -

do.call("paste", c(tmp, sep=""))
##  [1] "a1+" "b1+" "a2+" "b2+" "a3+" "b3+" "a1-" "b1-" "a2-" "b2-" "a3-"
## [12] "b3-"
#do.call("paste", list(tmp, sep=""))

do.call(paste, list(as.name("A"), as.name("B")), quote = TRUE)
## [1] "A B"
do.call(paste, list(as.name("A"), as.name("B")), quote = TRUE)
## [1] "A B"

# 這個例子中,A箭阶、B被轉換為了符號對象虚茶,如果不quote起來就會報錯
#do.call(paste, list(as.name("A"), as.name("B")), quote = FALSE)
# 當然你如果直接使用下面這個語句結果是一樣的戈鲁,不過這里是介紹quote的用法
do.call(paste, list("A", "B"))
## [1] "A B"

從哪里尋找對象的例子:

A <- 2
f <- function(x) print(x ^ 2)
env <- new.env()
assign("A", 10, envir = env)
assign("f", f, envir = env)
f <- function(x) print(x)
f(A)
## [1] 2
# 使用當前環(huán)境函數(shù)與變量
do.call("f", list(A))
## [1] 2
# 使用env環(huán)境函數(shù)與當前環(huán)境變量
do.call("f", list(A), envir = env)
## [1] 4
# 使用當前環(huán)境函數(shù)與變量 
do.call(f, list(A), envir = env)
## [1] 2
# 使用env環(huán)境函數(shù)與env環(huán)境變量
do.call("f", list(quote(A)), envir = env)
## [1] 100
# 使用當前環(huán)境函數(shù)與env環(huán)境變量 
do.call(f, list(quote(A)), envir = env)
## [1] 10
# 使用env環(huán)境函數(shù)與env環(huán)境變量
do.call("f", list(as.name("A")), envir = env)
## [1] 100


eval(call("f", A))
## [1] 2
eval(call("f", quote(A)))
## [1] 2
eval(call("f", A), envir = env)
## [1] 4
eval(call("f", quote(A)), envir = env)
## [1] 100

上面例子多仇参,需要仔細揣摩參數(shù)變化后結果的變化。首先在新環(huán)境創(chuàng)建的函數(shù)對象是打印輸入的平方婆殿,A是10诈乒。

call函數(shù)用來創(chuàng)建和測試對象,不過看起來用法與quote()類似婆芦,將東西先存起來不執(zhí)行怕磨,等后續(xù)調用。

A <- 10.5
wait <- call("round", A)
eval(wait)
## [1] 10
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末消约,一起剝皮案震驚了整個濱河市肠鲫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌或粮,老刑警劉巖导饲,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡渣锦,警方通過查閱死者的電腦和手機硝岗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來袋毙,“玉大人型檀,你說我怎么就攤上這事√牵” “怎么了胀溺?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長皆看。 經(jīng)常有香客問我月幌,道長,這世上最難降的妖魔是什么悬蔽? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任扯躺,我火速辦了婚禮,結果婚禮上蝎困,老公的妹妹穿的比我還像新娘录语。我一直安慰自己,他們只是感情好禾乘,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布澎埠。 她就那樣靜靜地躺著,像睡著了一般始藕。 火紅的嫁衣襯著肌膚如雪蒲稳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天伍派,我揣著相機與錄音江耀,去河邊找鬼。 笑死诉植,一個胖子當著我的面吹牛祥国,可吹牛的內容都是我干的。 我是一名探鬼主播晾腔,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼舌稀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了灼擂?” 一聲冷哼從身側響起壁查,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎剔应,沒想到半個月后睡腿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體康谆,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年嫉到,在試婚紗的時候發(fā)現(xiàn)自己被綠了沃暗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡何恶,死狀恐怖孽锥,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情细层,我是刑警寧澤惜辑,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站疫赎,受9級特大地震影響盛撑,放射性物質發(fā)生泄漏。R本人自食惡果不足惜捧搞,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一抵卫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胎撇,春花似錦介粘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至爵憎,卻和暖如春慨亲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宝鼓。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工刑棵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人席函。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓铐望,卻偏偏與公主長得像冈涧,于是被迫代替她去往敵國和親茂附。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,336評論 0 10
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,813評論 0 38
  • 文/小殘夜半涼 車窗上印著水霧 和一層薄薄的月亮 水滴從車窗上面 一行行地落下 緩慢地 劃破窗外忽明忽暗的燈火督弓。 ...
    騎馬上岸的人閱讀 439評論 5 5
  • 二期這幾個人中营曼,最強的絕對是白崎護。鋼鐵一般的心愚隧。
    水草肅Gloria閱讀 148評論 0 0
  • Chapter 6 植還在浴室里面洗澡蒂阱。 現(xiàn)在是凌晨2:38分锻全,靜優(yōu)端坐在床的邊緣,看著書桌那邊的電子鐘录煤。暫時一個...
    a魚小姐閱讀 3,240評論 0 0