gpt4 book ai didi

rlang:错误:无法将函数转换为字符串

转载 作者:行者123 更新时间:2023-12-01 08:44:24 25 4
gpt4 key购买 nike

我创建了一个函数来将函数名转换为字符串。版本 1 func_to_string1 运行良好,但版本 2 func_to_string2 不起作用。

func_to_string1 <- function(fun){
print(rlang::as_string(rlang::enexpr(fun)))
}

func_to_string2 <- function(fun){
is.function(fun)
print(rlang::as_string(rlang::enexpr(fun)))
}

func_to_string1 有效:

> func_to_string1(sum)
[1] "sum"

func_to_string2 不起作用。

> func_to_string2(sum)
Error: Can't convert a primitive function to a string
Call `rlang::last_error()` to see a backtrace

我的猜测是,通过在将 fun 转换为字符串之前调用它,它会在函数内部进行评估并因此抛出错误消息。但是,我没有做任何作业,为什么会发生这种情况呢?

我的问题是为什么会发生这种情况,有没有更好的方法将函数名转换为字符串?

感谢任何帮助,谢谢!

最佳答案

这不是一个完整的答案,但我认为它不适合评论。

R 有一种称为 pass-by-promise 的机制,因此,函数的形式参数是惰性对象(promise),只有在使用时才会被评估。即使你没有执行任何任务,对 is.function 的调用使用参数,因此,promise 被评估结果“替换”。

不过,在我看来,这似乎是 rlang* 中的不一致,特别是考虑到科里的回答,这意味着即使在使用给定参数之后,R 仍然可以找到 promise 对象;这样做的机制可能不是 R 的公共(public) API 的一部分。

*编辑:见评论。

无论如何,您可以将 enexpr/enquo/ensym 视为 base::missing,从某种意义上说,您应该只将它们与您在函数体中根本没有使用过的参数一起使用。

关于rlang:错误:无法将函数转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57500016/

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