作者mark1357945 (浮夢)
看板Statistics
標題[討論] R的$指令配合變數
時間Mon Nov 19 14:24:12 2012
最近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
1F:→ gsuper:paste("testdata$column",i,sep="") , 把引號去掉 11/19 16:06
2F:→ obarisk:apply比較好吧 11/19 20:09
3F:→ clickhere:他的問題不在paste,也不是apply... 11/19 21:37
4F:→ clickhere:get和assign不是這樣用的.這兩個function只適用basic 11/19 21:38
5F:→ clickhere:R objects. (matrix, vector, ..) 但不是 list或 11/19 21:38
6F:→ clickhere:data.frame. 因為他們和 Environment 有關. 11/19 21:39
7F:→ clickhere:get("column1",pos=name) 11/19 21:40
8F:→ clickhere:name[["column1"]] 回傳 vector 11/19 21:42
9F:→ clickhere:name["column1"] 回傳 element of the list. 11/19 21:42
10F:→ clickhere:Similarly for assign(). 11/19 21:43
11F:→ clickhere:其它advanced R objects也同適用. 11/19 21:52
12F:→ obarisk:by column做動作用apply就好了 11/19 22:02
13F:→ gsuper:C大你寫那麼多他也看不懂~~ 11/19 22:14
14F:→ gsuper:原po你試試: colMeans(你的矩陣[,c("column1,column2")]) 11/19 22:19
15F:→ gsuper:其中 c("column1,column2") 就看你怎麼設定了 11/19 22:20
16F:→ mark1357945:恩-.- 我初學不是很久 有的觀念不太踏實 不過感謝 11/19 22:38
17F:→ mark1357945:大家的回答 我會照上面的當方向去查資料的! 11/19 22:38
後來我還是打算用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)