作者andrew43 (讨厌有好心推文後删文者)
看板R_Language
标题Re: [问题] 将一数字重复取函数值
时间Mon Mar 16 14:20:03 2020
写一个递回最简单的例子与教学供你参考
# 一个预先写好的 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
: 但不太会写
: 希望板上有高手可以指点迷津
: 感激不尽
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.248.222.1 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1584339605.A.E26.html
※ 编辑: andrew43 (60.248.222.1 台湾), 03/16/2020 14:22:01
※ 编辑: andrew43 (60.248.222.1 台湾), 03/16/2020 14:23:47
※ 编辑: andrew43 (60.248.222.1 台湾), 03/16/2020 14:27:26
1F:推 TreeMan: 请问n可否预设 = 1?或是安排NULL有特别的用途吗? 03/16 14:29
2F:→ andrew43: 可以的。我只是用来强调使用计数器的思路而已。 03/16 14:32
3F:→ andrew43: 另外预设NULL会提醒我自己「什麽鬼东西我还是别碰它」:) 03/16 14:34
4F:→ andrew43: 但实际上预设1可以省去接下来检查是否为1的动作 03/16 14:44
※ 编辑: andrew43 (60.248.222.1 台湾), 03/16/2020 14:45:19
5F:→ TreeMan: 了解,谢谢 03/16 15:16
6F:推 penispower: 等等尝试看看,非常感谢! 03/16 17:01
7F:推 JuanMaestrow: 写一个while loop 用 update 的 也可唷 03/17 13:04