以下代码显示了一个函数,它检查两个data.frames是否以所有可能的方式相等并告诉差异。现在,我正在尝试将此功能添加到包中,我正在使用roxygen2。
#' Funcao compararBases
#'
#' @description E uuma funcao que compara se duas tabelas sao identicas. Para isso, e primeiramente avaliado se as variaveis sao as mesmas, tanto em nome quanto em natureza. Numa segunda fase, e conferida se as observaçoes tambem estao iguais em ambas tabelas.
#' @param DadosFixos Tabela que ja se encontra no repositório ou tabela 1 a ser conferida.
#' @param DadosNovos Tabela "nova" a ser inserida no repositorio ou tabela 2 a ser conferida.
#'
#' @return NULL
library(stringr)
compararBases <- function(DadosFixos,DadosNovos){
dados <- DadosFixos
dados_col <- DadosNovos
## Comparar Colunas numero de variaveis##
if(length(dados) > length(dados_col)){
t <- FALSE
dadosfixos <- dados[!dados %in% dados_col]
colnames(dadosfixos) <- paste0("dadosfixos.",colnames(dadosfixos))
"Tabela nova criada;"
"As colunas da tabela DadosFixos/Tabela 1 não se encontram em DadosNovos/Tabela 2."
} else if(length(dados) < length(dados_col)){
t <- FALSE
dadosnovos <- dados_col[!dados_col %in% dados]
colnames(dadosnovos) <- paste0("dadosnovos.",colnames(dadosnovos))
"Tabela nova criada;"
"As colunas da tabela DadosNovos/Tabela 2 não se encontram na tabela DadosFixos/Tabela 1."
} else{
t <- TRUE
"As tabelas possuem os mesmos números de colunas."
}
## Comparar se possuem mesmos nomes de variáveis ##
if(t == TRUE){
if(identical(dados, dados_col) == FALSE){
if(identical(colnames(dados),colnames(dados_col)) == FALSE){
w <- FALSE
nomescolunasbasefixa <- colnames(dados)
nomescolunasbasenova <- colnames(dados_col)
colunasfixas <- nomescolunasbasefixa[!nomescolunasbasefixa %in% nomescolunasbasenova]
colunasfixas <- paste0("DadosFixos.",colunasfixas)
colunasnovas <- nomescolunasbasenova[!nomescolunasbasenova %in% nomescolunasbasefixa]
colunasnovas <- paste0("DadosNovos.",colunasnovas)
colunasdiferentes <- c(colunasfixas,colunasnovas)
paste0("Nome diferente em:", colunasdiferentes)
}else{
### Comparar as estruturas das variáveis ###
w <- FALSE
d2 <- all.equal(dados, dados_col)
structure <- d2[grep("Modes", d2)]
if(length(structure) != 0){
print("Erro de estrutura da variável em:")
print(substring(substr(word(structure,2), 1, nchar(word(structure,2))-2),2))
}
### Comparar o numero de linhas ###
numLin <- all.equal(dados,dados_col)
d3 <- numLin[grep("Lengths|lengths", numLin)]
if(length(d3) != 0){
if(length(dados[,1]) > length(dados_col[,1])){
dados2 <- dados
for(i in 1:length(dados)){
dados2[,i] <- as.character(dados[,i])
}
dados_col2 <- dados_col
for(i in 1:length(dados_col)){
dados_col2[,i] <- as.character(dados_col[,i])
}
observations <- NULL
for(i in 1:length(dados2)){
obsDum <- rownames(dados2[!dados2[,i] %in% dados_col2[,i],])
observations <- c(obsDum, observations)
}
print("Observações de DadosFixos/Tabela 1 que não estão na base adicionada:")
print(unique(observations))
}
if(length(dados[,1]) < length(dados_col[,1])){
dados2 <- dados
for(i in 1:length(dados)){
dados2[,i] <- as.character(dados[,i])
}
dados_col2 <- dados_col
for(i in 1:length(dados_col)){
dados_col2[,i] <- as.character(dados_col[,i])
}
observations <- NULL
for(i in 1:length(dados2)){
obsDum <- rownames(dados_col2[!dados_col2[,i] %in% dados2[,i],])
observations <- c(obsDum, observations)
}
print("Observações de DadosNovos/Tabela 2 que não estão na base fixa:")
print(unique(observations))
}
}
## analise das células específicas ##
d4 <- numLin[grep("string|Mean relative", numLin)]
if(length(d4) != 0){
if(length(dados[,1]) == length(dados_col[,1])){
dados2 <- dados
for(i in 1:length(dados)){
dados2[,i] <- as.character(dados[,i])
}
dados_col2 <- dados_col
for(i in 1:length(dados_col)){
dados_col2[,i] <- as.character(dados_col[,i])
}
celula <- NULL
celDum <- NULL
for(i in 1:length(dados2)){
for(j in 1:length(dados2[,1])){
if(!dados2[j,i] %in% dados_col2[j,i]){
celDum <- c(j,colnames(dados2)[i])
celula <- rbind(celula, celDum)
}
}
}
string1 <- "Os pontos específicos dos dados que estão em discordância são:"
celula <- data.frame(celula, row.names = NULL)
colnames(celula) <- c("Observação", "Variável")
print(string1)
print(celula)
}
}
}
}else{
"As tabelas são identicas"
}
}
return(NULL)
}
但是,我的文档未创建,我收到以下警告消息:
==> devtools::document(roclets=c('rd', 'collate', 'namespace', 'vignette'))
Updating ipeadata.input documentation
Loading ipeadata.input
First time using roxygen2. Upgrading automatically...
Warning: compararBases.R:10: Missing name
Warning: The existing 'NAMESPACE' file was not generated by roxygen2, and will not be overwritten.
Documentation completed