gpt4 book ai didi

r - 解析传递给辅助函数的函数值

转载 作者:行者123 更新时间:2023-12-03 16:36:04 24 4
gpt4 key购买 nike

我有一个函数,定义如下

fn1 <- function(var = NULL) {
if (missing(var)) var else deparse(substitute(var))
}

我可以调用这个函数,它给了我我想要的。

fn1()                                                                                                                                                
# NULL

fn1(test)
# [1] "test"

我现在想要功能化 var 的解析.

fn2 <- function(var = NULL) {
deparse_var(var)
}

deparse_var <- function(var) {
if (missing(var)) var else deparse(substitute(var))
}

但这并没有给我预期的结果

fn2()                                                                                                                                                
# [1] "var"

fn2(test)
# [1] "var"

因为我的值是 vardeparse_var() ,我可以查一下是不是 NULL .但是 deparse如果不是,则不起作用。

deparse_var <- function(var) {
if (is.null(var)) var else deparse(substitute(var))
}

fn2()
# [1] NULL

fn2(test)
# Error in deparse_var(var) : object 'test' not found

最佳答案

我们可以在第一帧替换

deparse_var <- function(var) {
if (is.null(var)) var else deparse(substitute(var, sys.frame(1)))
}

fn2 <- function(var = NULL) {
deparse_var(var)
}
fn2()
#NULL

fn2(test)
#[1] "test"

或使用 missing
deparse_var <- function(var) {
if (missing(var)) var else deparse(substitute(var, sys.frame(1)))
}

fn2()
#[1] "NULL"
fn2(test)
#[1] "test"

为了将“NULL”纠正为 NULL , 一个 if/else可以添加。来自@nathaneastwood 的评论
deparse_var <- function(var) {
res <- if (missing(var)) var else deparse(substitute(var, sys.frame(1)))
if (res == "NULL" && is.null(var)) NULL else res
}

关于r - 解析传递给辅助函数的函数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60908650/

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