作者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
推 gsuper:這內文好眼熟XDD 謝謝啦 06/02 22:50
→ gsuper:我之前是用 assign() 也不錯 06/03 13:12
→ memphis:cool assign 更直覺 eval parse 比較像low level function 06/03 14:49
→ memphis:疑.. 試用的結果 這兩招 不太一樣 orz 06/03 14:54
※ 編輯: memphis 來自: 140.109.73.18 (06/03 14:58)
→ gsuper:name<-paste("x",1:10,sep="_") 06/03 15:04
→ gsuper:for(g in 1:10){assign(name[g],g*100)} 06/03 15:04
→ gsuper:這樣就會產生10個變數 06/03 15:04
→ gsuper:eval那種是直接貼程式碼進去 R,assign是內建的動態變數函數 06/03 15:08
→ gsuper:前一種比較靈活 後面那種比較簡單 反正都OK 06/03 15:09
→ clickhere:這兩個函數主要並不是用來做動態變數的. 06/05 08:28
→ clickhere:加上get()和environment(),四個才是主要的應用. 06/05 08:29
→ clickhere:內定的環境是.GlobalEnv,但你可以用environment()去新增 06/05 08:30
→ clickhere:一個環境,然後用assign(),eval(),get()在一個封閉(乾淨) 06/05 08:31
→ clickhere:的環境中做運算.結束後再把它刪除. 06/05 08:32
→ clickhere:所以,一個function,其實就是一個臨時的環境. 06/05 10:32
→ memphis:請問在寫什麼樣的東西會用上這些env阿? 我還沒有概念 06/06 08:59