Re: [問題] 將一數字重複取函數值

作者: andrew43 (討厭有好心推文後刪文者)   2020-03-16 14:20:03
寫一個遞迴最簡單的例子與教學供你參考
# 一個預先寫好的 function,可以回值 w + 1
func <-
function(w){
return(w + 1)
}
# N = 10 預設做10次
# n 是遞迴時的計數器,提供遞迴時串接資訊用的,使用時不要指派值
myFunc <-
function(x, N = 10, n = NULL) {
# 一開始 n 為預設 NULL,先把它指定為 1
# 若已經遞迴過了,n 不是 NULL,跳過不管
if (is.null(n)) {
n <- 1
}
# 令 res1 為「x + 1」
res1 <- func(x)
cat("Call func():", n, "time(s)\n") # 搞懂後可以把這行刪除
# 若 n 為 N 則回傳 res1,完成。
# 否則(還小於 N)遞迴,其中以 res1(而不是 x)為第一個參數
# 並令計數器加 1
if (n == N) {
return(res1)
} else {
n <- n + 1
myFunc(res1, N, n)
}
}
# 丟入 10,做 5 次 func()
# 結果應是 10 +1 +1 +1 +1 +1 = 15
myFunc(10, N = 5)
# Call func(): 1 time(s)
# Call func(): 2 time(s)
# Call func(): 3 time(s)
# Call func(): 4 time(s)
# Call func(): 5 time(s)
# [1] 15
※ 引述《penispower (筆就是力量)》之銘言:
: 想做的事情:
: 自行寫好了一個函數
: 想要將一個起始值丟進去得到函數值
: 再將函數值再丟進去取得第二個函數值
: 如此反覆操作取得10000個值並放入一個向量內
: 自己的想法是寫for loop
: 但不太會寫
: 希望板上有高手可以指點迷津
: 感激不盡
作者: TreeMan (好啊...)   2020-03-16 14:29:00
請問n可否預設 = 1?或是安排NULL有特別的用途嗎?
作者: andrew43 (討厭有好心推文後刪文者)   2020-03-16 14:32:00
可以的。我只是用來強調使用計數器的思路而已。另外預設NULL會提醒我自己「什麼鬼東西我還是別碰它」:)但實際上預設1可以省去接下來檢查是否為1的動作
作者: TreeMan (好啊...)   2020-03-16 15:16:00
了解,謝謝
作者: penispower (penispower)   2020-03-16 17:01:00
等等嘗試看看,非常感謝!
作者: JuanMaestrow (多多)   2020-03-17 13:04:00
寫一個while loop 用 update 的 也可唷

Links booklink

Contact Us: admin [ a t ] ucptt.com