Corrigindo um aviso múltiplo "coluna desconhecida"

170

Eu tenho um aviso múltiplo persistente de "coluna desconhecida" para todos os tipos de comandos (por exemplo, str (x) para instalar atualizações em pacotes) e não tenho certeza de como depurar isso ou corrigi-lo.

O aviso "coluna desconhecida" está claramente relacionado a uma variável em um tbl_df que eu renomeei, mas o aviso aparece em todos os tipos de comandos aparentemente não relacionados ao tbl_df (por exemplo, instalando atualizações em um pacote, str (x) em que x é simplesmente um vetor de caractere).

ssp3nc3r
fonte
11
Sei que a pergunta é vaga, mas parece o problema. Posso até digitar bobagens (por exemplo, erros de digitação) e receber os avisos. Eu estou supondo que é persistente no próprio ambiente IDE, de alguma forma?
Ssp3nc3r
1
Você pode postar o comando exato e a saída que obtém, por favor?
precisa saber é o seguinte
3
Sim, versão mais recente do RStudio. Limpei o ambiente, reiniciei e ele começa a ocorrer quando carrego um objeto TBL_DF. Parece que corrigi o problema convertendo-o para as.data.frame, fechando tudo e recarregando o quadro de dados. No futuro, gostaria de entender duas coisas: como evitar o problema usando o tbl_df e por que os avisos parecem persistir no ambiente.
Ssp3nc3r
1
Estou recebendo o mesmo erro. Existe FACEBOOK.1uma coluna em um dos seus data.frames e você a chama em df$FACEBOOK.1algum lugar no seu script R? Meu humilde palpite é que este é um erro no tibblepacote apresentado na v1.1: blog.rstudio.org/2016/07/05/05/tibble-1-1 . Você tibblecarregou explicitamente?
Dpprdan
5
Isso está acontecendo comigo também. Posso reproduzir o padrão em vários computadores, mas o aviso aparece aparentemente aleatoriamente após alguns comandos, por exemplo, biblioteca (Hmisc) ou criação de um quadro de dados com o dplyr. Os avisos se referem a colunas que ainda não foram criadas - eu as faço mais tarde no meu código. Reiniciei o R e o Rstudio várias vezes e a execução do código limpo não ajuda. O que é isso???
Nova

Respostas:

57

Esse é um problema com a ferramenta Diagnóstico no RStudio (a ferramenta que mostra avisos e possíveis erros no seu código). Foi parcialmente corrigido nesse commit no RStudio v1.1.103 ou posterior por @ kevin-ushey . A correção é parcial, porque os avisos ainda aparecem (embora com menos frequência). Esse problema foi relatado com um exemplo reproduzível em https://github.com/rstudio/rstudio/issues/7372 e foi corrigido na solicitação pull do RStudio v1.4 (a ser lançada)

Existem várias soluções alternativas disponíveis, escolha a solução que você prefere:

  • Desative o diagnóstico de código para todos os arquivos em Preferências / Código / Diagnóstico

  • Desative todos os diagnósticos para um arquivo específico:

    Adicione no início do (s) arquivo (s) aberto (s):

     # !diagnostics off

    Em seguida, salve os arquivos e os avisos devem parar de aparecer.

  • Desative o diagnóstico para as variáveis ​​que causam o aviso

    Adicione no início do (s) arquivo (s) aberto (s):

     # !diagnostics suppress=<comma-separated list of variables>

    Em seguida, salve os arquivos e os avisos devem parar de aparecer.

Os avisos aparecem porque a ferramenta de diagnóstico no RStudio analisa o código-fonte para detectar erros e, quando executa as verificações de diagnóstico, acessa colunas na sua ripa que não foram inicializadas, fornecendo o aviso que vemos. Os avisos não aparecem porque você executa coisas não relacionadas, eles aparecem quando os diagnósticos do RStudio são executados (quando um arquivo é salvo, depois modificado, quando você executa algo ...).

zeehio
fonte
13
boa decisão. Isso funcionou para mim em rstudio 0,99, 'mostrar diagnósticos para r' desmarque em Ferramentas> Opções globais> Code> Diagnóstico
Chris Holbrook
8
RStudio 1.1.383 com R 3.4.3, o problema ainda existe.
MS Berends
4
O problema ainda existe com a versão 1.1.423. desmarcando 'show diagnóstico' funciona muito bem
Adrian
2
Ainda existe a v1.1.456. Suspiro.
Geotheory
3
Ainda existe o RStudio v1.1.643 com R v3.5.1 no RStudio Server no Ubuntu.
RFelber
49

Tenho encontrado o mesmo problema e, embora não saiba por que isso ocorre, fui capaz de identificar quando ocorreu e, assim, impedir que isso acontecesse.

O problema parece estar com a adição de uma nova coluna, derivada da indexação, em um quadro de dados R básico vs. em um quadro de dados tibble. Veja este exemplo, onde você adiciona uma nova coluna ( age) a um quadro de dados R base:

base_df <- data.frame(id = c(1:3), name = c("mary", "jill","steve"))

base_df$age[base_df$name == "mary"] <- 47

Isso funciona sem retornar um aviso. Mas quando o mesmo é feito com um petisco, ele lança um aviso (e consequentemente, acho que está causando o estranho, aparentemente não provocado, problema de aviso múltiplo):

library(tibble)

tibble_df <- tibble(id = c(1:3), name = c("mary", "jill","steve"))

tibble_df$age[tibble_df$name == "mary"] <- 47

Warning message:
Unknown column 'age' 

Certamente existem maneiras melhores de evitar isso, mas descobri que primeiro criar um vetor de NAs faz o trabalho:

tibble_df$age <- NA

tibble_df$age[tibble_df$name == "mary"] <- 47
sabre
fonte
13
Minha resposta claramente não é a história toda: ainda estou recebendo os avisos (múltiplos) e, como outros comentadores aludiram, a parte frustrante é a aparente arbitrariedade dela. A tbl_dfparece ser necessário para produzir os avisos, mas não tenho certeza de que seja suficiente. Ou seja, acho que esse aviso pode surgir quando tbl_dfs são usados ​​em conjunto com funções de outros pacotes tidyverse (por exemplo, tidyr, dplyr). Pequeno preço a pagar por um pacote tão crítico de pacotes, mas estranho / irritante no entanto.
Sabre
Criar um vetor de NAs funcionou para mim! (RStudio versão 1.1.456, versão R 3.5.1)
petzi
Às vezes, quero especificar o tipo da coluna, por exemplo, Datas R e, se preencher NA, as datas preenchidas posteriormente serão convertidas para o tipo numérico.
Jiāgěng
1
@ Jiāgěng as.Date(NA_character_)NAcom classe Date.
Stibu 3/09/19
Tibbles são, por design, mais restritivos que data.frames. Pode ser por design, que você não deve iniciar uma coluna atribuindo apenas parte a ela. No entanto, se esse é um recurso de proteção e não um erro de design, é preferível um erro único no início da atribuição de riscas.
vinnief 29/04
17

Eu enfrentei esse problema ao usar o pacote "dplyr".
Para aqueles que enfrentam esse problema depois de usar a função "group_by" na biblioteca "dplyr":

Descobri que desagrupar as variáveis ​​resolve o problema de aviso da coluna desconhecida. Às vezes, tive que percorrer o desagrupamento várias vezes até que o problema fosse resolvido.

Varun
fonte
4

A conversão da classe em data.frameresolveu o problema para mim:

library(dplyr)
df <- data.frame(id = c(1,1:3), name = c("mary", "jo", "jill","steve"))
dfTbl <- df %>%
  group_by(id) %>%
  summarize (n = n())
class(dfTbl) # [1] "tbl_df"     "tbl"        "data.frame"
dfTbl = as.data.frame(dfTbl)
class(dfTbl) # [1] "data.frame"

Emprestou o script parcial de @adts

stok
fonte
Ele funciona como um encanto. Fiquei me perguntando se há alguma desvantagem em convertê-lo em um quadro de dados e depois convertê-lo de volta no tibble. São apenas os avisos que ele perde?
P130ter
1
Não funcionou para mim rstudio 1.1.442 ainda obterWarning message: Unknown or uninitialised column: 'bad_column'
andemexoax
3

Eu tive esse problema ao lidar com funções de rabisco e lapply juntos. A tagarelice parecia salvar as coisas como uma lista dentro do quadro de dados.

Eu o resolvi usando unlist antes de adicionar os resultados de uma função lapply ao tibble.

Michael Joseph
fonte
1

Também me deparei com esse problema, exceto através de uma ripa criada usando um bloco dyplyr. Aqui está uma pequena modificação do código do sabre para mostrar como cheguei ao mesmo erro.

library(dplyr)

df <- data.frame(id = c(1,1:3), name = c("mary", "jo", "jill","steve"))

t <- df %>%
  group_by(id) %>%
  summarize (n = n())

t
str(t)


t$newvar[t$id==1] <- 0
anúncios
fonte
1

Digamos que eu queira selecionar a (s) seguinte (s) coluna (s)

best.columns = 'id'

Para mim, o seguinte deu o aviso:

df%>% select_(one_of(best.columns))

Enquanto isso funcionou como esperado, embora, até onde eu saiba dplyr, isso deva ser idêntico.

df%>% select_(.dots = best.columns)
JelenaČuklina
fonte
0

Recebo esses avisos quando renomeio uma coluna usando dplyr::renamedepois de lê-la usando o readrpacote.

O nome antigo da coluna não é renomeado no specatributo Portanto, remover o specatributo faz com que os avisos desapareçam. Também é uma boa idéia remover a classe "spec_tbl_df".

attr(dat, "spec") <- NULL
class(dat) <- setdiff(class(dat), "spec_tbl_df")
alko989
fonte