[討論] R的$指令配合變數

看板Statistics作者 (浮夢)時間11年前 (2012/11/19 14:24), 編輯推噓0(0017)
留言17則, 4人參與, 最新討論串1/1
最近Lab在跑一些統計資料 大部分都是一些滿簡單的運算(ex: 取mean) 就只是要處理的column和資料量滿多的 因為運算都一樣只是需要一直改變變數名稱 所以想要用迴圈的方式來解決這些名稱相似的column 可是目前遇到一個麻煩就是 當我想要用變數配合loop 指定table的某些column時 他會告訴我 $後面的變數名稱沒辦法接一些get、paste等指令 舉個簡化過的例子 "假設我想算這兩行 testdata$column1、testdata$column2的平均值 放到mean01和mean02這兩個變數裡面" 我原本是想改成 for(i in 1:2) assign(paste("mean0",i,sep=""),paste("testdata$column",i,sep="")) 不過似乎只要使用了$就沒辦法抓到資料 (像是我發現沒辦法這樣用=> get("testdata$column1") ,資料會抓不到) 後來發現不行之後 我試著把$前後分開 name <- testdata for(i in 1:2) assign(paste("mean0",i,sep=""),name$(paste("column",i,sep=""))) 不過他表示" $ operator is invalid for atomic vectors " 小弟剛接觸R不是很久 都是自己查google和翻書自學 總覺得應該不是什麼很難的功能 可是查資料查到卡關了 我想應該是有一些概念上的盲點沒看到-.- 所以不知道版上神人們能不能指點一下哪邊弄錯了 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.121.75

11/19 16:06, , 1F
paste("testdata$column",i,sep="") , 把引號去掉
11/19 16:06, 1F

11/19 20:09, , 2F
apply比較好吧
11/19 20:09, 2F

11/19 21:37, , 3F
他的問題不在paste,也不是apply...
11/19 21:37, 3F

11/19 21:38, , 4F
get和assign不是這樣用的.這兩個function只適用basic
11/19 21:38, 4F

11/19 21:38, , 5F
R objects. (matrix, vector, ..) 但不是 list或
11/19 21:38, 5F

11/19 21:39, , 6F
data.frame. 因為他們和 Environment 有關.
11/19 21:39, 6F

11/19 21:40, , 7F
get("column1",pos=name)
11/19 21:40, 7F

11/19 21:42, , 8F
name[["column1"]] 回傳 vector
11/19 21:42, 8F

11/19 21:42, , 9F
name["column1"] 回傳 element of the list.
11/19 21:42, 9F

11/19 21:43, , 10F
Similarly for assign().
11/19 21:43, 10F

11/19 21:52, , 11F
其它advanced R objects也同適用.
11/19 21:52, 11F

11/19 22:02, , 12F
by column做動作用apply就好了
11/19 22:02, 12F

11/19 22:14, , 13F
C大你寫那麼多他也看不懂~~
11/19 22:14, 13F

11/19 22:19, , 14F
原po你試試: colMeans(你的矩陣[,c("column1,column2")])
11/19 22:19, 14F

11/19 22:20, , 15F
其中 c("column1,column2") 就看你怎麼設定了
11/19 22:20, 15F

11/19 22:38, , 16F
恩-.- 我初學不是很久 有的觀念不太踏實 不過感謝
11/19 22:38, 16F

11/19 22:38, , 17F
大家的回答 我會照上面的當方向去查資料的!
11/19 22:38, 17F
後來我還是打算用for的方式去寫 改成 for(i in 1:2){ temp=get(paste("column",i,sep=""),pos=name) assign(paste("mean0",i,sep=""),temp) } 就可以用了 如果資料量和column數要修也是滿簡單的 gsuper大和obarisk大提供的colMeans和apply我有去查過試過 colMeans就要對array作mean運算來說真的滿方便的 而apply在對大量column作任何function都滿強大的 我想之後應該也會常派上用場~ 因為使用的需求有點趕 R真的學的有點太倉促不扎實 也感謝clickhere大對我一些基本觀念的指正 受教了^^ ※ 編輯: mark1357945 來自: 140.113.121.75 (11/19 23:48)
文章代碼(AID): #1GgT2F_z (Statistics)