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