更改R中S3方法的默认参数
是否可以更改R中S3方法的默认参数 使用Formal更改参数很容易更改R中S3方法的默认参数,r,R,是否可以更改R中S3方法的默认参数 使用Formal更改参数很容易 # return default arguments of table > args(table) function (..., exclude = if (useNA == "no") c(NA, NaN), useNA = c("no", "ifany", "always"), dnn = list.names(...), deparse.level = 1) # Update an argument >
# return default arguments of table
> args(table)
function (..., exclude = if (useNA == "no") c(NA, NaN), useNA = c("no",
"ifany", "always"), dnn = list.names(...), deparse.level = 1)
# Update an argument
> formals(table)$useNA <- "always"
# Check change
> args(table)
function (..., exclude = if (useNA == "no") c(NA, NaN), useNA = "always",
dnn = list.names(...), deparse.level = 1)
#返回表的默认参数
>args(表)
函数(…,exclude=if(useNA==“no”)c(NA,NaN),useNA=c(“no”,
“ifany”、“始终”),dnn=list.names(…),deparse.level=1)
#更新参数
>格式(表)$useNA args(表)
函数(…,exclude=if(useNA==“no”)c(NA,NaN),useNA=“始终”,
dnn=list.names(…),deparse.level=1)
但不是S3方法
# View default argument of S3 method
> formals(utils:::str.default)$list.len
[1] 99
# Attempt to change
> formals(utils:::str.default)$list.len <- 99
Error in formals(utils:::str.default)$list.len <- 99 :
object 'utils' not found
#查看S3方法的默认参数
>格式(utils:::str.default)$list.len
[1] 99
#试图改变
>在@nicola的慷慨提示下,这里是评论的答案版本:
您可以使用assignInNamespace()
编辑S3方法和其他未导出的函数。这允许您使用新的用户定义函数替换给定命名空间中的函数(fixInNamespace()
将在编辑器中打开目标函数以进行更改)
#看看我们将要改变什么
格式(utils:::str.default)$list.len
#> [1] 99
#从utils名称空间提取整个函数
如果要编辑,您可以尝试使用fixInNamespace()
或assignInNamespace()
扩展@gfgm(您应该写一个答案)所说的内容,请尝试j
# Take a look at what we are going to change
formals(utils:::str.default)$list.len
#> [1] 99
# extract the whole function from utils namespace
f_to_edit <- utils:::str.default
# make the necessary alterations
formals(f_to_edit)$list.len<-900
# Now we substitute our new improved version of str.default inside
# the utils namespace
assignInNamespace("str.default", f_to_edit, ns = "utils")
# and check the result
formals(utils:::str.default)$list.len
#> [1] 900