看板 Statistics 關於我們 聯絡資訊
動態變數的指定 常用的方法是用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