如何修改survPresmooth包中control.presmooth的n.boot参数?
修改survPresmooth包中control.presmooth的n.boot参数的可行方法
你尝试修改参数时遇到的两个错误翻译如下:
- 执行
control.presmooth$n.boot <- c(1000, 200)时的报错:
类型为'closure'的对象不能被子集化
- 执行
trace(control.presmooth, edit = TRUE)时的错误:
错误于.makeTracedFunction(def, tracer, exit, at, print, doEdit):
trace()中的编辑只能修改函数体,不能修改参数或默认值
问题原因
control.presmooth是一个生成控制参数列表的函数(类型为closure),不是现成的列表对象,所以无法直接用$符号修改它的参数;而trace()工具仅支持编辑函数体,无法修改函数的默认参数值。
下面是两种可行的解决方法:
方法一:临时自定义控制参数列表
直接调用control.presmooth函数并指定新的n.boot值,生成自定义控制列表后,传递给survPresmooth的control参数即可:
# 生成包含自定义n.boot的控制参数列表 my_control <- control.presmooth(n.boot = c(1000, 200)) # 将自定义控制参数传入survPresmooth主函数 survPresmooth(你的其他必要参数, control = my_control)
方法二:永久修改函数默认参数
如果希望后续调用control.presmooth时默认使用新的n.boot值,可以用formals()函数修改该函数的默认参数:
# 修改control.presmooth的n.boot默认参数值 formals(control.presmooth)$n.boot <- c(1000, 200)
修改完成后,直接调用control.presmooth()时,n.boot会自动使用c(1000, 200)作为默认值。
内容的提问来源于stack exchange,提问作者user23325569
相关产品推荐
相关产品推荐

