如何让formals()支持获取带package::前缀的函数参数?
解决R中
formals()支持带包前缀函数名的问题 当func_name是带package::前缀的字符串时,直接用formals(func_name)会报错,因为formals()会把整个字符串当作单一函数名去查找,无法识别包前缀结构。可以用下面两种更优雅的方法解决:
方法1:拆分包名与函数名,从命名空间获取函数
先把带前缀的字符串拆成包名和函数名两部分,再从对应包的命名空间里取出函数,最后获取参数:
func_name <- "dplyr::mutate" # 拆分字符串得到包名和函数名 split_result <- strsplit(func_name, "::")[[1]] pkg <- split_result[1] func <- split_result[2] # 获取函数参数 formals(getFromNamespace(func, pkg))
方法2:解析表达式直接处理带前缀的函数名
把字符串转成R表达式并执行,这样就能自动识别package::的结构,再传入formals():
func_name <- "dplyr::mutate" # 解析表达式并获取参数 formals(eval(parse(text = func_name)))
这两种方法都不需要手动移除前缀,能完整保留包函数的引用逻辑,适合在你的R包内部调用其他开发中包函数的场景。
内容的提问来源于stack exchange,提问作者Will
相关产品推荐
相关产品推荐

