我想创建一个 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/