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