作者comegover ()
看板Statistics
标题[程式] R function回传值
时间Mon Aug 20 21:38:18 2012
------------------------------------------------------------------------
[软体程式类别]: R
[程式问题]: function 回传值
[软体熟悉度]:低(1~3个月)
[问题叙述]:
1. 请问要如何让R的function不用写出print就可以存下回传值?
2. 要如何回传两个以上的矩阵(或值)
3. 如何让function中所到的每一个变数都可以被存取下来
[程式范例]:
Q25<-function(x)
{
Q<-summary(x[,1])[2]
i<-2
while (i <= 360)
{
Q<-cbind(Q,summary(x[,i])[2])
i<-i+1
}
Q<-as.numeric(Q)
print(Q)
}
这是我用来算一个大矩阵每一个column的第25百分位的程式码
我在commend window中打上:A<-Q25(z) (假设z是一个100*360的矩阵)
但他会如我所写的先print出来之後才存入A中
有试或若不写print那一行,A<-Q25(z)的A会出现Null 或是Q25(z)会没有东西
但每次都印出来好烦,不知道是不是改了什麽就可以改善这个问题?
第二个问题是在其他的function中遇到的,想debug时,
却无法抓取function计算会用到的变数值,仅有我最後一行写的print才能让我再使用
例如我无法在commend window中用i去计算[这例子烂了点,i是我设的,当然知道是多少]
最後一个问题就是,我可否一次存取两个答案
例如我要第25百分位,也要第50百分位,我现在的做法是两个都计算完之後rbind起来
等到使用此function後,再自己把一个大矩阵分成两个
但这样就多了两个步骤,不知是否有方式可解决?
谢谢!!!!
-----------------------------------------------------------------------------
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.165.217.188
1F:→ gsuper:用全域变数 a<<-10 ; 就可以把里面的变数直接存在外面 08/20 23:31
2F:→ gsuper:除非你要写递回 不然用全域变数很方便 08/20 23:32
3F:→ gsuper:一次解决你的三个问题 08/20 23:33
4F:推 acecc:第二个问题:把browser() 放到函数里面,debug好用 :) 08/20 23:51
5F:推 Wush978:第三个问题请参考environment 08/21 01:21
6F:→ Wush978:第一个问题你可以尝试用return(xxx), xxx 是function要回 08/21 01:22
7F:→ Wush978:传的东西 08/21 01:22
8F:→ Wush978:另外,若你打算写重复利用的函数的话, 建议不要用"<<-" 08/21 01:23
9F:→ Wush978:把两个矩阵放到一个list()物件内一起丢出来即可 08/21 01:24
10F:→ comegover:谢谢各位! 我会再试试看!!! 08/21 01:27