R语言自定义包安装函数中require将参数识别为变量名如何解决
问题原因
require()、library() 这类R的包加载函数默认启用非标准评估机制,会直接把传入的参数名当作包名读取,不会解析变量中存储的实际字符串值。你现有代码中的install.packages()本身就支持直接传入字符串变量,不存在解析问题,报错完全由require(package_name)的解析逻辑导致。
修正后的代码
只需要给require()添加character.only = TRUE参数,显式声明传入的是字符串类型的包名即可:
conditional_install <- function(package_name){ print(package_name) # 简化原有判断逻辑,效果完全一致 if(!package_name %in% rownames(installed.packages())){ install.packages(package_name) } require(package_name, character.only = TRUE) }
补充说明
如果后续你需要用library()函数加载存储在变量中的包,也可以使用同样的参数配置:library(package_name, character.only = TRUE)。
内容的提问来源于stack exchange,提问作者Nakul Upadhya
相关产品推荐
相关产品推荐

