r - 如何创建这个函数?

标签 r

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

相关文章:

r - dplyr:如何按子组标准过滤组

r - 链接颜色与整数ggplot2

R - 计算每列中某些值的数量

r - 与模式相关的 mlogit 包问题

r - 在数字序列中查找 "valleys"

r - ggparcoord : color using discrete scale

r - 如何根据 R 中列中的值组合排除行?

r - R中的条件if语句

替换 R 中 lm() OLS 模型中的基础标准错误

r - 如何将所有非空csv文件读入R中的列表