使用R时出现警告:The following objects are masked from ‘package:base’: format.pval, units

在使用R下载一个程序包的时,有时候会出现这种情况:

使用R时出现警告:The following objects are masked from ‘package:base’: format.pval, units_第1张图片

 原因:这里的mask本意是“面罩”,引申“掩饰”,就是说有A包掩饰了B包(不一定B包时你需要的),只是系统在调取这个Hmisc包时,至少有A、B两个package里都出现同一个名字的函数/变量。我看的资料是说R作为一个开源软件,大佬们推的各种包可能会出现你命ABC函数,我也有ABC函数的情况,但R在调取ABC函数时是按照顺序来的,当找到自己需要的包时就可以了,只是会提示你重复的情况。

查看:是哪个函数重复?  输入命令 search()    可以看到出现如下的,base的包里重复了同个函数:format.pval, units

这个base包在本次操作中会被系统忽略掉,不过本次操作也不需要它

> search()   #在出现警报命令后输入该命令查看
 [1] ".GlobalEnv"        "package:Hmisc"     "tools:rstudio"     "package:stats"    
 [5] "package:graphics"  "package:grDevices" "package:utils"     "package:datasets" 
 [9] "package:methods"   "Autoloads"         "package:base"     

解决办法

1)直接忽略。不影响后面的命令,但是在强迫症的人看来,那抹红色的字体总像仿佛码着整整齐齐的砖头中间凸出一行黑色。那么请看2)

2)忽略警报:输入命令 

library(Hmisc,warn.conflicts = F)

但是输入后的结果如下,虽然没出现这个警报,但是,但是它已经在前面出现过了啊?! 就当做看不见吧,是这个意思吗?但是我重启R之后再加载Hmisc包,还是会有警报的。我不太理解这个消除警报的操作,对于了解自己电脑里的程序包有函数冲突的,可以先输入这个命令,再来加载程序包。

> library(Hmisc)

载入程辑包:‘Hmisc’

The following objects are masked from ‘package:base’:

    format.pval, units

> library(Hmisc,warn.conflicts = F)
> 
> library(Hmisc)

3) 替换法:有这个办法,但试用了没用,不适合新手

调用被遮盖的函数:在这里,被遮盖的函数有format.pval, units,输入命令 

base::format.pval   就是 程序包名::·函数名
> base::units
function (x) 
UseMethod("units")

> base::format.pval
function (pv, digits = max(1L, getOption("digits") - 2L), eps = .Machine$double.eps, 
    na.form = "NA", ...) 
{
    if ((has.na <- any(ina <- is.na(pv)))) 
        pv <- pv[!ina]
    r <- character(length(is0 <- pv < eps))
    if (any(!is0)) {
        rr <- pv <- pv[!is0]
        expo <- floor(log10(ifelse(pv > 0, pv, 1e-50)))
        fixp <- expo >= -3 | (expo == -4 & digits > 1)
        if (any(fixp)) 
            rr[fixp] <- format(pv[fixp], digits = digits, ...)
        if (any(!fixp)) 
            rr[!fixp] <- format(pv[!fixp], digits = digits, ...)
        r[!is0] <- rr
    }
    if (any(is0)) {
        digits <- max(1L, digits - 2L)
        if (any(!is0)) {
            nc <- max(nchar(rr, type = "w"))
            if (digits > 1L && digits + 6L > nc) 
                digits <- max(1L, nc - 7L)
            sep <- if (digits == 1L && nc <= 6L) 
                ""
            else " "
        }
        else sep <- if (digits == 1) 
            ""
        else " "
        r[is0] <- paste("<", format(eps, digits = digits, ...), 
            sep = sep)
    }
    if (has.na) {
        rok <- r
        r <- character(length(ina))
        r[!ina] <- rok
        r[ina] <- na.form
    }
    r
}

结果出是出来了,但是对后面的影响是啥,还没继续探索,对新手操作这个已经算是满意的结果了,不会出现其他的下载报错

你可能感兴趣的:(笔记,r语言,小程序)