gpt4 book ai didi

r - 如何创建这个函数?

转载 作者:行者123 更新时间:2023-12-02 17:59:10 26 4
gpt4 key购买 nike

我想创建一个 verif() 函数,它接受名为 val 的单个参数。该参数只能接受数据框或列表。
此函数应与 %>% 管道一起使用。

此函数应返回与以下名称相对应的字符向量:

  • 数据框或
  • %>% 之前传递的列表中的每个元素。

这是我的尝试:

verif <- function(val) {
if(is.data.frame(val)) {
return(deparse(substitute(val), backtick = TRUE))
} else if(is.list(val)) {
return(sapply(val, function(x) deparse(substitute(x), backtick = TRUE)))
} else {
return("Argument must be a data frame or a list.")
}
}

我想要什么:

iris %>% verif() # return "iris"
list(iris, cars) %>% verif() # return c("iris","cars")

非常感谢

最佳答案

这让你相当接近:

verif <- function(val) {
if(typeof(val) != 'list') stop('verif must be a list or data frame')
sc <- sys.calls()
val <- deparse(substitute(val))
if(val != '.') return(val)

caller <- sc[[length(sc) - 1]]
lapply(as.list(caller), deparse)[[2]]

}

verif(iris)
#> [1] "iris"

verif(volcano)
#> Error in verif(volcano): verif must be a list or data frame

iris %>% verif()
#> [1] "iris"

list(iris, cars) %>% verif()
#> [1] "list(iris, cars)"

创建于 2022 年 12 月 20 日 reprex v2.0.2

关于r - 如何创建这个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74864731/

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