更改R中S3方法的默认参数

更改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 >

是否可以更改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
> 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