R/delete_pac.R

##-------------------------------------------------------------
## 
##-------------------------------------------------------------
delete_pac = function(..., verbose = TRUE)
{
	if(missing(...)) return(invisible(NULL))
	
	## nomes dos pacotes como vetor
	v = tryCatch(is.vector(...), error = function(e)return(FALSE))

	## nomes dos pacotes
	if(v) pac = as.vector(...) else 
		pac = as.character(match.call(expand.dots = FALSE)[[2]])#end if
	
	if(is.null(pac)) return(invisible(NULL))
	
	instalado = list.files(.libPaths())
	
	base_rec = rownames(installed.packages(priority = "high"))
	
	base = rownames(installed.packages(priority = "base"))
	
	rec = rownames(installed.packages(priority = "recommended"))
	
	outros = instalado[!instalado %in% base_rec]
	
	#pro = pac[pac%in%protected]	
	
	pkgs.yes = pac[pac%in%outros]
	
	pkgs.no = pac[!pac%in%instalado]
	
	pkgs.base = pac[pac %in% base]
	
	pkgs.rec = pac[pac %in% rec]
	
	## pacotes que serão removidos
	if(length(pkgs.yes)) 
	{
		## verifica namespace
		nm = pkgs.yes[unlist(lapply(pkgs.yes, isNamespaceLoaded))]
		## unload package
		if(length(nm)) unload_pac(pkgs.yes, verbose=FALSE)

		pkv = unlist(sapply(pkgs.yes, packageDescription, 
							fields="Version", drop=T))
		
		pkyes = paste(pkgs.yes, pkv)

		## remove pkgs.yes
		lapply(pkgs.yes, remove_pac)
		
		
		if(verbose) mensagem(pkyes, msg = 1, aviso="Package deleted", simb="dif",
				subtitulo = "The following packages have been deleted:")
	}#end if
	
	## pacotes não encontrados
	if(length(pkgs.no))
		if(verbose) mensagem(pkgs.no, aviso = "Package not found",
				subtitulo = "There is no package called:")
	## pacotes base bloqueados
	if(length(pkgs.base)) 
		if(verbose) mensagem(pkgs.base, aviso="Package base", 
				subtitulo = "The following packages not deleted:")
	## pacotes recomendados bloqueados
	if(length(pkgs.rec)) 		
		if(verbose) mensagem(pkgs.rec, aviso="Package recommended",
				subtitulo = "The following packages not deleted:")
	
	#return(list(deleted=pkgs.yes, not_found=pkgs.no, base=pkgs.base, recommended=pkgs.rec))
	return(invisible(ifelse(length(pkgs.yes), TRUE, FALSE)))

}#end funtion remove_pac

## function remove pacote
remove_pac = function(pkg_del)
{	## delete package
	utils::remove.packages(pkg_del, lib = dirname(system.file(package = pkg_del)))
}#end funtion remove_pac
salah31416/bibliotheca documentation built on June 16, 2019, 10:02 p.m.