作者memphis (让你喜欢这世界~)
站内Statistics
标题Re: [程式] R 呼叫变数 动态变数
时间Thu Jun 2 17:47:07 2011
动态变数的指定 常用的方法是用list
根据之前的文章
可以有一些有趣的应用
以下提供几个范例
####
for (i in 1:10) {
eval(parse(text = paste("x",i, " <- ", i, sep="")))
}
####
A <- "I am A"
B <- "I am B"
for(i in c("A", "B")){
eval(parse(text = paste("call",i, " <- ", i, sep="")))
}
####
C <- "I am C"
D <- "I am D"
for(i in c("C", "D")){
assign(paste("call",i, sep=""), i)
}
Note: assign() 与 eval(parse()) 的效果并不相同
※ 引述《gsuper (统计的巴比伦塔)》之铭言:
: 标题: [程式] R呼叫变数
: 时间: Wed Sep 8 17:35:28 2010
:
:
:
:
: 请问一下
:
: 如果我有个变数名如下
:
: > a <- 1
: > b <- 2
: > ls()
: [1] "a" , "b"
:
:
: 现在我想把 a 和 b 变成 list
: 但因为我的 "a" 和 "b" 是动态产生的
: 所以我不能写死成 huge <- list(a,b)
:
: 请问有什麽 function 可以透过字串来呼叫变数
: 比方说我输入 function("a")
: 就能叫出 1 这个数字 ?
:
:
:
: --
:
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 140.113.239.247
: → ablazekandyh:huge[[1]]? 09/08 20:28
: 推 Wush978:eval(parse(text="a")) 09/08 21:01
: → Wush978:by 版友clickhere某次推文 09/08 21:01
: → Wush978:不知道这是不是你要的 09/08 21:02
:
: Yes!
:
: That`s exactly what I want.
:
: Thank you!
: ※ 编辑: gsuper 来自: 140.113.239.247 (09/08 21:11)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.109.73.18
1F:推 gsuper:这内文好眼熟XDD 谢谢啦 06/02 22:50
2F:→ gsuper:我之前是用 assign() 也不错 06/03 13:12
3F:→ memphis:cool assign 更直觉 eval parse 比较像low level function 06/03 14:49
4F:→ memphis:疑.. 试用的结果 这两招 不太一样 orz 06/03 14:54
※ 编辑: memphis 来自: 140.109.73.18 (06/03 14:58)
5F:→ gsuper:name<-paste("x",1:10,sep="_") 06/03 15:04
6F:→ gsuper:for(g in 1:10){assign(name[g],g*100)} 06/03 15:04
7F:→ gsuper:这样就会产生10个变数 06/03 15:04
8F:→ gsuper:eval那种是直接贴程式码进去 R,assign是内建的动态变数函数 06/03 15:08
9F:→ gsuper:前一种比较灵活 後面那种比较简单 反正都OK 06/03 15:09
10F:→ clickhere:这两个函数主要并不是用来做动态变数的. 06/05 08:28
11F:→ clickhere:加上get()和environment(),四个才是主要的应用. 06/05 08:29
12F:→ clickhere:内定的环境是.GlobalEnv,但你可以用environment()去新增 06/05 08:30
13F:→ clickhere:一个环境,然後用assign(),eval(),get()在一个封闭(乾净) 06/05 08:31
14F:→ clickhere:的环境中做运算.结束後再把它删除. 06/05 08:32
15F:→ clickhere:所以,一个function,其实就是一个临时的环境. 06/05 10:32
16F:→ memphis:请问在写什麽样的东西会用上这些env阿? 我还没有概念 06/06 08:59