assign()函数的用法
assign(x, value, envir = as.environment(-1))
- x:一个字符字符串,表示要创建或修改的变量名。
- value:要赋给变量的值。
- envir:指定环境,默认为当前环境(as.environment(-1))。可以指定其他环境,例如全局环境或特定的列表。
实例
# 使用 assign() 创建一个变量
assign("my_variable", 42)
# 检查变量的值
print(my_variable) # 输出 42
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代码去执行。用法如下:
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 3
b1 4 5 6
c1 7 8 9
t1=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)