Re: [程式] R 呼叫變數 動態變數

看板Statistics作者 (讓你喜歡這世界~)時間14年前 (2011/06/02 17:47), 編輯推噓1(1015)
留言16則, 3人參與, 最新討論串1/1
動態變數的指定 常用的方法是用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

06/02 22:50, , 1F
這內文好眼熟XDD 謝謝啦
06/02 22:50, 1F

06/03 13:12, , 2F
我之前是用 assign() 也不錯
06/03 13:12, 2F

06/03 14:49, , 3F
cool assign 更直覺 eval parse 比較像low level function
06/03 14:49, 3F

06/03 14:54, , 4F
疑.. 試用的結果 這兩招 不太一樣 orz
06/03 14:54, 4F
※ 編輯: memphis 來自: 140.109.73.18 (06/03 14:58)

06/03 15:04, , 5F
name<-paste("x",1:10,sep="_")
06/03 15:04, 5F

06/03 15:04, , 6F
for(g in 1:10){assign(name[g],g*100)}
06/03 15:04, 6F

06/03 15:04, , 7F
這樣就會產生10個變數
06/03 15:04, 7F

06/03 15:08, , 8F
eval那種是直接貼程式碼進去 R,assign是內建的動態變數函數
06/03 15:08, 8F

06/03 15:09, , 9F
前一種比較靈活 後面那種比較簡單 反正都OK
06/03 15:09, 9F

06/05 08:28, , 10F
這兩個函數主要並不是用來做動態變數的.
06/05 08:28, 10F

06/05 08:29, , 11F
加上get()和environment(),四個才是主要的應用.
06/05 08:29, 11F

06/05 08:30, , 12F
內定的環境是.GlobalEnv,但你可以用environment()去新增
06/05 08:30, 12F

06/05 08:31, , 13F
一個環境,然後用assign(),eval(),get()在一個封閉(乾淨)
06/05 08:31, 13F

06/05 08:32, , 14F
的環境中做運算.結束後再把它刪除.
06/05 08:32, 14F

06/05 10:32, , 15F
所以,一個function,其實就是一個臨時的環境.
06/05 10:32, 15F

06/06 08:59, , 16F
請問在寫什麼樣的東西會用上這些env阿? 我還沒有概念
06/06 08:59, 16F
文章代碼(AID): #1DvrmTgr (Statistics)