R語言中do.call函數(shù)學(xué)習(xí)

雖然R語言有類型很豐富的數(shù)據(jù)結(jié)構(gòu)带兜,但是很多時(shí)候數(shù)據(jù)結(jié)構(gòu)比較復(fù)雜,那么基本就會用到list這種結(jié)構(gòu)的數(shù)據(jù)類型备徐。但是list對象很難以文本的形式導(dǎo)出痴晦,因此需要一個(gè)函數(shù)能快速將復(fù)雜的list結(jié)構(gòu)扁平化成dataframe。這里要介紹的就是do.call函數(shù)故慈。

  這里是do.call 函數(shù)的官方文檔:

do.call {base}R Documentation

Execute a Function Call

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

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

argsalistof arguments to the function call. Thenamesattribute ofargs?gives the argument names.

quotea logical value indicating whether to quote the arguments.

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

Details

IfquoteisFALSE, the default, then the arguments are evaluated (in the calling environment, not inenvir). IfquoteisTRUEthen each argument is quoted (seequote) so that the effect of argument evaluation is to remove the quotes – leaving the original arguments unevaluated when the call is constructed.

The behavior of some functions, such assubstitute, will not be the same for functions evaluated usingdo.call?as if they were evaluated from the interpreter. The precise semantics are currently undefined and subject to change.

Value

The result of the (evaluated) function call.

Warning

This should not be used to attempt to evade restrictions on the use of.Internal?and other non-API calls.

References

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)The New S Language. Wadsworth & Brooks/Cole.



簡單的講板熊,do.call 的功能就是執(zhí)行一個(gè)函數(shù),而這個(gè)函數(shù)的參數(shù)呢察绷,放在一個(gè)list里面, 是list的每個(gè)子元素。

  看例子:

> tmp <- data.frame('letter'= letters[1:10],'number'=1:10,'value'= c('+','-'))> tmp

? letter number value1a1+2b2-3c3+4d4-5e5+6f6-7g7+8h8-9i9+10j10-> tmp[[1]]

[1] a b c d e f g h i j> tmp[[2]]

[1]12345678910> tmp[[3]]

[1] + - + - + - + - + ->do.call("paste", c(tmp, sep =""))

[1]"a1+""b2-""c3+""d4-""e5+""f6-""g7+""h8-""i9+""j10-"

  這里的tmp使用data.frame函數(shù)創(chuàng)建的津辩,其實(shí)它本質(zhì)上還是一個(gè)list拆撼,這里分別用[[]]符號顯示他的三個(gè)元素,可以看到do.call函數(shù)把tmp的三個(gè)元素(三個(gè)向量)作為paste函數(shù)的參數(shù)喘沿。這個(gè)例子我們也可以這樣寫:

>paste(tmp[[1]],tmp[[2]],tmp[[3]], sep = "")

[1] "a1+"? "b2-"? "c3+"? "d4-"? "e5+"? "f6-"? "g7+"? "h8-"? "i9+"? "j10-"

可以看到兩種結(jié)果是一模一樣的闸度。

  再舉一個(gè)例子:

> number_add <- list(101:110,1:10)> number_add

[[1]]

[1]101102103104105106107108109110[[2]]

[1]12345678910> add <-function(x,y) {x + y}> addfunction(x,y) {x + y}>do.call(add, number_add)

[1]102104106108110112114116118120> add(number_add[[1]], number_add[[2]])

[1]102104106108110112114116118120


  最后回到開頭,假如說我們有一個(gè)list對象蚜印,這個(gè)對象里面是格式一致的dataframe莺禁,我們需要將這個(gè)list對象合并成一個(gè)總的dataframe并輸出成文本文件,那么可以這樣做:

> list1

[[1]]

? up down number1A? ? a12B? ? b23C? ? c34D? ? d45E? ? e5[[2]]

? up down number1A? ? a12B? ? b23C? ? c34D? ? d45E? ? e5[[3]]

? up down number1A? ? a12B? ? b23C? ? c34D? ? d45E? ? e5>do.call("rbind",list1)

? up down number1A? ? a12B? ? b23C? ? c34D? ? d45E? ? e56A? ? a17B? ? b28C? ? c39D? ? d410E? ? e511A? ? a112B? ? b213C? ? c314D? ? d415E? ? e5

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末窄赋,一起剝皮案震驚了整個(gè)濱河市哟冬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌忆绰,老刑警劉巖浩峡,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異错敢,居然都是意外死亡翰灾,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纸淮,“玉大人平斩,你說我怎么就攤上這事⊙士椋” “怎么了双戳?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長糜芳。 經(jīng)常有香客問我飒货,道長,這世上最難降的妖魔是什么峭竣? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任塘辅,我火速辦了婚禮,結(jié)果婚禮上皆撩,老公的妹妹穿的比我還像新娘扣墩。我一直安慰自己,他們只是感情好扛吞,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布呻惕。 她就那樣靜靜地躺著,像睡著了一般滥比。 火紅的嫁衣襯著肌膚如雪亚脆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天盲泛,我揣著相機(jī)與錄音濒持,去河邊找鬼。 笑死寺滚,一個(gè)胖子當(dāng)著我的面吹牛柑营,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播村视,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼官套,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蚁孔?” 一聲冷哼從身側(cè)響起奶赔,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎勒虾,沒想到半個(gè)月后纺阔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡修然,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年笛钝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了质况。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡玻靡,死狀恐怖结榄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情囤捻,我是刑警寧澤臼朗,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站蝎土,受9級特大地震影響视哑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜誊涯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一挡毅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧暴构,春花似錦跪呈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至砾隅,卻和暖如春误阻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背琉用。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工堕绩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人邑时。 一個(gè)月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像特姐,于是被迫代替她去往敵國和親晶丘。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容