作者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)