You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在do.call()中指定包名调用函数失效问题咨询

在do.call中用::指定包名的问题

你遇到的情况是因为do.call的第一个参数如果传字符串,它只会在当前环境里查找完全匹配这个字符串的函数对象,而"pals::brewer.spectral"并不是一个真正的函数名,只是R里调用包内函数的语法表达式,所以R找不到对应的函数,就会报错。

下面是几种可行的解决方式:

1. 直接传入函数对象(推荐)

不用把函数写成字符串,直接用::获取函数对象传给do.call,不用提前加载包也能正常运行:

do.call(pals::brewer.spectral, args = list(n=10))
# 输出结果:
# [1] "#9E0142" "#D53E4F" "#F46D43" "#FDAE61" "#FEE08B" "#E6F598" "#ABDDA4" "#66C2A5" "#3288BD" "#5E4FA2"

2. 通过get()获取包内函数(字符串形式需求下)

如果必须用字符串指定函数名,可以用get()从包的命名空间里取出函数:

do.call(get("brewer.spectral", envir = asNamespace("pals")), args = list(n=10))

3. 加载包后传函数名字符串

就是你例子里的方法,先加载包,再直接传函数名的字符串:

library(pals)
do.call("brewer.spectral", args = list(n=10))

内容的提问来源于stack exchange,提问作者Marc in the box

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 12:49:57