暂无说说

R语言动态赋值

R jiajun 4个月前 (06-07) 122次浏览 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)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址