文章目录
parse()函数的用法实例eval()函数的用法实例:do.call()函数的用法实例实现对多个数据框的合并parse()函数的用法
parse()可以把字符串解析为R语言的代码。函数形式如下:
parse(file = "", n = NULL, text = NULL, prompt = "?",keep.source = getOption("keep.source"), srcfile,encoding = "unknown")
file:是字符串所在的文件或者URLtext: 接受一个带解析的字符串
这两个参数使用其中一个就可以了
实例
> parse(text='2+3')# expression(2+3)> parse(text='a<-10')# expression(a<-10)
eval()函数的用法
此函数可以接受一个expression对象作为参数,并把此对象当做R代码去执行。用法如下:
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] 10
do.call()函数的用法
do.call 构造并执行 来自字符串名称或直接函数调用来的函数, 并将其传递给它的参数列表 > 参数列表 即 list, 所以 do.call 针对的就是 list。
do.call(what, args, quote = FALSE, envir = parent.frame())
参数:
what
可以是一个函数也可以是一个 字符串形式的函数名称(eg. kmeans or ‘kmeans’).args
供函数调用的参数设置,这些参数都将被 what 识别并调用.quote 逻辑值, 是否引用参数.envir 评估函数调用时所处的环境. 对于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 3b1 4 5 6c1 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//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()》对你有帮助,请点赞、收藏,并留下你的观点哦!