R 使用 formals() 更改默认值不适用于 sort()
R Changing default values with formals() does not work for sort()
我意识到使用 formals(sort)$decreasing <- TRUE
并没有像我预期的那样更改默认值,而 formals(sample)$replace <- TRUE
完成了它的工作。
重现问题:
# does not work
sort(1:5)
formals(sort)$decreasing <- TRUE
sort(1:5)
args(sort) # default apparently changed correctly, but output did not
# works fine
sample(1:2, 3)
formals(sample)$replace <- TRUE
sample(1:2, 3)
我很好奇为什么 formals() 显然只适用于某些函数以及我将如何更改默认值!
我使用 R 3.4.2
请注意,与 sample()
不同,sort()
是 R 中的通用函数。如果您只键入 sort
而没有括号,您可以看到它调用了 useMethod()
这就是它触发 S3 通用行为的方式。那里的代码实际上并没有得到 "run",它只是根据您传递给它的对象的 class 启动正确版本的排序。但是,您可以这样做
sort(1:5)
# [1] 1 2 3 4 5
formals(sort.default)$decreasing <- TRUE
sort(1:5)
# [1] 5 4 3 2 1
当然,改变内置函数的行为通常是一个糟糕的想法。实际上,这是使用全局环境中的不同设置制作 sort()
的卷影副本。原始排序仍可在
base::sort.default(1:5)
# [1] 1 2 3 4 5
我意识到使用 formals(sort)$decreasing <- TRUE
并没有像我预期的那样更改默认值,而 formals(sample)$replace <- TRUE
完成了它的工作。
重现问题:
# does not work
sort(1:5)
formals(sort)$decreasing <- TRUE
sort(1:5)
args(sort) # default apparently changed correctly, but output did not
# works fine
sample(1:2, 3)
formals(sample)$replace <- TRUE
sample(1:2, 3)
我很好奇为什么 formals() 显然只适用于某些函数以及我将如何更改默认值!
我使用 R 3.4.2
请注意,与 sample()
不同,sort()
是 R 中的通用函数。如果您只键入 sort
而没有括号,您可以看到它调用了 useMethod()
这就是它触发 S3 通用行为的方式。那里的代码实际上并没有得到 "run",它只是根据您传递给它的对象的 class 启动正确版本的排序。但是,您可以这样做
sort(1:5)
# [1] 1 2 3 4 5
formals(sort.default)$decreasing <- TRUE
sort(1:5)
# [1] 5 4 3 2 1
当然,改变内置函数的行为通常是一个糟糕的想法。实际上,这是使用全局环境中的不同设置制作 sort()
的卷影副本。原始排序仍可在
base::sort.default(1:5)
# [1] 1 2 3 4 5