暂无说说

R语言动态赋值

R jiajun 1年前 (2019-06-07) 456次浏览 0个评论 扫描二维码

在做统计分析的时候,往往会碰到把一些结果动态赋值给一系列变量。例如,在 for 循环中,将分类等于 1 的结果赋值给变量 type1,将分类等于 2 的结果赋值给变量 type2……将分类等于 i 的结果赋值给变量 typei。在R语言种,有两种方法可以实现这个需求,一种是利用 assign()跟 get()函数,另一种是利用 eval()跟 parse()函数。

assign 与 get

get():返回以字符串为变量名的变量的值

assign():为以字符串为变量名的变量赋值

应用举例

假如我们有 100 个数据文件,名称分别为 1.txt,2.txt,…,100.txt。现在需要把这 100 个文件的数据分别读取:

 n = 100
suffix = "txt"
vari = "data"
for (i in n) {
     file_name = paste(i, suffix, sep = ".")
     x_name = paste(vari, i, sep = "_")
     assign(x_name, read.table(file_name))
}

这样就会生成 data_1 到 data_100 共 100 个变量,分别读取了 100 份数据。assign 的作用就是一个中介,因为我们希望把变量的名称都按一个规律命名,用到了循环和字符串的拼接。但这个名称只是字符串,assign 就把字符串变成了变量,付给它所要的值。而如果我们想分别看看这 100 个变量的长度,可以使用 get 方法:

for (i in 1:n) {
     y_name = paste(vari, i, sep = "_")
     print(length(get(y_name)))
}

eval 跟 parse

parse():将字符串转化为表达式(expression)

eval() :对表达式求解

rm(list=ls())
for(i in 1:5){
    text <- paste("a",i,"<-",i,sep="")
    eval(parse(text=text))
}
ls()

输出结果

[1] "a1"   "a2"   "a3"   "a4"   "a5"   "i"    "text"

 

喜欢 (0)

您必须 登录 才能发表评论!