R语言中的函数20:parse(),eval()和do.call()
生活随笔
收集整理的這篇文章主要介紹了
R语言中的函数20:parse(),eval()和do.call()
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- parse()函數(shù)的用法
- 實(shí)例
- eval()函數(shù)的用法
- 實(shí)例:
- do.call()函數(shù)的用法
- 實(shí)例
- 實(shí)現(xiàn)對(duì)多個(gè)數(shù)據(jù)框的合并
parse()函數(shù)的用法
parse()可以把字符串解析為R語(yǔ)言的代碼。函數(shù)形式如下:
parse(file = "", n = NULL, text = NULL, prompt = "?",keep.source = getOption("keep.source"), srcfile,encoding = "unknown")- file:是字符串所在的文件或者URL
- text: 接受一個(gè)帶解析的字符串
這兩個(gè)參數(shù)使用其中一個(gè)就可以了
實(shí)例
> parse(text='2+3') # expression(2+3) > parse(text='a<-10') # expression(a<-10)eval()函數(shù)的用法
此函數(shù)可以接受一個(gè)expression對(duì)象作為參數(shù),并把此對(duì)象當(dāng)做R代碼去執(zhí)行。用法如下:
eval(expr, envir = parent.frame(),enclos = if(is.list(envir) || is.pairlist(envir))parent.frame() else baseenv())實(shí)例:
> eval(parse(text='2+3')) # [1] 5 > eval(parse(text='a<-10')) > a # [1] 10do.call()函數(shù)的用法
do.call 構(gòu)造并執(zhí)行 來(lái)自字符串名稱或直接函數(shù)調(diào)用來(lái)的函數(shù), 并將其傳遞給它的參數(shù)列表 > 參數(shù)列表 即 list, 所以 do.call 針對(duì)的就是 list。
do.call(what, args, quote = FALSE, envir = parent.frame())參數(shù):
- what
可以是一個(gè)函數(shù)也可以是一個(gè) 字符串形式的函數(shù)名稱(eg. kmeans or ‘kmeans’). - args
供函數(shù)調(diào)用的參數(shù)設(shè)置,這些參數(shù)都將被 what 識(shí)別并調(diào)用. - quote 邏輯值, 是否引用參數(shù).
- envir 評(píng)估函數(shù)調(diào)用時(shí)所處的環(huán)境. 對(duì)于what是字符串形式函數(shù)名稱且對(duì)應(yīng)的參數(shù)都是符號(hào)或者引用的表達(dá)式時(shí)會(huì)非常有用.
實(shí)例
do.call(rbind,list(a1=c(1,2,3),b1=c(4,5,6),c1=c(7,8,9))) [,1] [,2] [,3] a1 1 2 3 b1 4 5 6 c1 7 8 9t1=do.call('kmeans',list(x=iris[,1:4],centers=3)) t1$cluster [1] 1 3 3 3 1 1 1 1 3 3 1 1 3 3 1 1 1 1 1 1 1 1 1 1 3 3 1 1 1 3 3 1 1 1 3 1 1 1 3 1 1 3 3 1 [45] 1 3 1 3 1 1 2 2 2 2 2 2 2 3 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 [89] 2 2 2 2 2 3 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 [133] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2可以參考:
https://amjiuzi.github.io/2017/09/30/do_call/
實(shí)現(xiàn)對(duì)多個(gè)數(shù)據(jù)框的合并
先把所有數(shù)據(jù){x1,x2,…,x100}并到一個(gè)list
data <- lapply(paste0("x", 1:100), function(x) eval(as.name(x))) do.call("rbind", data)同時(shí)讀取多個(gè)數(shù)據(jù)庫(kù)并合并
data <- lapply(1:10, function(x) read.csv(paste0(x,".csv"))) do.call("rbind", data)總結(jié)
以上是生活随笔為你收集整理的R语言中的函数20:parse(),eval()和do.call()的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 在NUC972上实现websocket客
- 下一篇: EEG基础