gpt4 book ai didi

r - 你可以通过 do.call 使用 fix 吗?

转载 作者:行者123 更新时间:2023-12-04 10:12:51 25 4
gpt4 key购买 nike

我有一些代码,通过 do.call 调用 fix 比直接调用更方便。任何旧数据框都适用于本示例:

dfr <- data.frame(x = 1:5, y = letters[1:5])

明显的第一次尝试是

do.call("fix", list(dfr))

不幸的是,这失败了

Error in fix(list(x = 1:5, y = 1:5)) : 'fix' requires a name

所以,我们给它一个名字:

do.call("fix", list(dfr = dfr))

这次失败了

Error in is.name(subx) : 'subx' is missing

郑重声明,edit 也不起作用。

dfr <- do.call("edit", list(dfr = dfr))

请问有人能想出一个合理的解决方法吗?

编辑:经过反射(reflection),我忘记了 fix 总是将其答案转储到全局环境中,这对于测试示例来说很好,但不适合与函数一起使用。 Joshua 出色的解决方法不能扩展到与 edit 一起使用。

对于加分,如何通过do.call调用edit

最佳答案

您可以使用 substitute,当您想使用变量名作为标签时,这也很有用。

do.call("fix",list(substitute(dfr)))

为清晰起见进行编辑

使用 call 命令更容易了解其工作原理:

> call("fix",dfr)
fix(list(x = c(1, 2, 3, 4, 5), y = 1:5))
> call("fix",substitute(dfr))
fix(dfr)

因此,当您使用 substitute 时,正在创建的命令使用符号的名称而不是评估的符号。如果您将 eval 包裹在这些表达式周围,您会看到第一个示例给出了您遇到的相同错误,而第二个示例按预期工作。

阅读 hadley 的链接后,正在评估的内容变得更加清晰:

> as.name("dfr")==substitute(dfr)
[1] TRUE

关于r - 你可以通过 do.call 使用 fix 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3874376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com