Виправлення декількох попереджень "невідомий стовпець"


171

У мене є стійке багаторазове попередження про "невідомий стовпець" для всіх типів команд (наприклад, str (x) для встановлення оновлень на пакети), і не впевнений, як це налагодити чи виправити.

Попередження "невідомий стовпець" явно пов'язане зі змінною в tbl_df, яку я перейменував, але попередження з'являється у всіх видах команд, здавалося б, не пов'язаних із tbl_df (наприклад, встановлення оновлень на пакет, str (x), де x просто вектор символів).


11
Я усвідомлюю, що питання неясне, але так здається, проблема. Я навіть можу вводити дурниці (наприклад, друкарські помилки) та отримувати попередження. Я здогадуюсь, це якось стійко в самому середовищі IDE?
ssp3nc3r

1
Чи можете ви опублікувати точну команду та отриманий результат, будь ласка?
konvas

3
Так, остання версія RStudio. Я очистив навколишнє середовище, перезапустив, і воно починає виникати, коли я завантажую в TBL_DF-об'єкт. Здається, виправили цю проблему, перетворивши її в as.data.frame, закривши все, а потім перезавантаживши кадр даних. Вперед, я хотів би зрозуміти дві речі: як уникнути проблеми за допомогою tbl_df і чому начебто попередження зберігаються в оточенні.
ssp3nc3r

1
Я отримую ту ж помилку. Чи FACEBOOK.1стовпець стовпця в одному з ваших data.frames і чи називаєте ви його df$FACEBOOK.1десь у вашому R-скрипті? Моя покірна здогадка полягає в тому, що це помилка в tibbleпакеті, представленому в версії 1 : blog.rstudio.org/2016/07/05/tibble-1-1 . Ви tibbleявно завантажили?
dpprdan

5
Це відбувається і зі мною. Я можу відтворити шаблон на декількох комп'ютерах, але попередження видається випадковим чином після деяких команд, наприклад, бібліотеки (Hmisc) або створення фрейму даних з dplyr. Попередження стосуються стовпців, які я ще не зробив - я їх згодом вношу у свій код. Я перезапустив R і Rstudio кілька разів, і запуск чистого коду не допомагає. Що це???
Нова

Відповіді:


58

Це проблема з інструментом «Діагностика» в RStudio (інструментом, який показує попередження та можливі помилки у вашому коді). Він був частково зафіксований на цьому роблять в RStudio v1.1.103 або пізніше @ Kévin-ushey . Виправлення часткове, оскільки попередження все ж з’являються (хоча і з меншою частотою). Про цю проблему було повідомлено з відтворюваним прикладом на https://github.com/rstudio/rstudio/isissue/7372 та було виправлено запит на тягу RStudio v1.4 (повинен бути випущений)

Є кілька способів вирішення, виберіть потрібне рішення:

  • Вимкніть діагностику коду для всіх файлів у розділі Налаштування / Код / Діагностика

  • Вимкнути всю діагностику для конкретного файлу:

    Додати на початку відкритих файлів:

     # !diagnostics off

    Потім збережіть файли, і попередження повинні припиняти відображатися.

  • Вимкніть діагностику змінних, які викликають попередження

    Додати на початку відкритих файлів:

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

    Потім збережіть файли, і попередження повинні припиняти відображатися.

Попередження з’являються тому, що інструмент діагностики в RStudio аналізує вихідний код для виявлення помилок, і коли він виконує діагностичні перевірки, він отримує доступ до стовпців у вашій табличці, які не ініціалізовані, даючи попередження, яке ми бачимо. Попередження не з’являються, оскільки ви виконуєте непов’язані речі, вони з’являються при виконанні діагностики RStudio (коли файл зберігається, то змінюється, коли ви щось запускаєте ...).


13
гарний дзвінок. Це працювало для мене в RStudio 0.99, зніміть прапорець "показати діагностику для r" в розділі Інструменти> Глобальні параметри> Код> Діагностика
Кріс Холбрук

8
RStudio 1.1.383 з R 3.4.3, проблема все ще існує.
MS Berends

4
Проблема все ще існує у версії 1.1.423. зняти прапорець "показати діагностику" чудово працює
Адріан

2
Досі існує v1.1.456. Зітхнути.
геотеорія

3
Підвіконня існує RStudio v1.1.643 з R v3.5.1 на RStudio Server на Ubuntu.
RFelber

49

Я зіткнувся з тією ж проблемою, і хоча я не знаю, чому вона виникає, мені вдалося визначити, коли вона виникає, і тим самим запобігти їй.

Здається, проблема полягає у додаванні нового стовпця, похідного від індексації, у базовий кадр R порівняно з типовим кадром даних. Візьмемо цей приклад, коли ви додаєте новий стовпець ( age) в базовий кадр даних R:

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

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

Це працює без повернення попередження. Але коли те ж саме робиться з табличкою, вона накидає попередження (і, отже, я думаю, що викликає дивну, здавалося б, не викликану, багаторазову проблему попередження):

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' 

Звичайно, є кращі способи уникнути цього, але я виявив, що перше створення вектора NAs виконує цю роботу:

tibble_df$age <- NA

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

13
Моя відповідь, очевидно, не у всій історії: я все ще отримую (багаторазові) попередження, і, як нагадали інші коментатори, розчаровуюча частина - це явна довільність цього. tbl_dfЗвісно ж необхідним для отримання попередження, але я не впевнений , що досить. Тобто, я думаю, це попередження може з’явитися, коли tbl_dfs використовується разом із функціями інших пакетів tidyverse (наприклад, tidyr, dplyr). Невелика ціна, яку потрібно заплатити за такий критичний пакет пакетів, але все ж дивна / дратівлива.
шабля

Створення вектора NAs працювало на мене! (RStudio Версія 1.1.456, R версія 3.5.1)
petzi

Іноді я хочу вказати тип стовпця, наприклад, Дати R, і якщо я заповнять NA, дати, які заповнюються пізніше, будуть перетворені на числовий тип.
Jiāgěng

1
@ Jiāgěng as.Date(NA_character_)дає NAз класом Date.
Stibu

Конструкції таблиць є більш обмежувальними, ніж фрейми data.frames. Можливо, за задумом ви не повинні ініціювати стовпець, призначивши йому лише його частину. Однак, якщо це захисна особливість, а не помилка дизайну, то рання одноразова помилка в присвоєнні таблиць була б набагато кращою.
vinnief

17

Я зіткнувся з цим питанням під час використання пакету "dplyr".
Для тих, хто стикається з цією проблемою після використання функції "group_by" у бібліотеці "dplyr":

Я виявив, що розгрупування змінних вирішує невідому проблему попередження стовпців. Іноді мені доводилося повторювати розгрупування кілька разів, поки проблема не буде вирішена.


5

Перетворення класу в data.frameвирішену для мене проблему:

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"

Позичив частковий сценарій від @adts


це працює як шарм. Мені було цікаво, чи є якийсь недолік перетворити його в кадр даних, а потім перетворити його на тибл. Це лише попередження, які він втрачає?
p130ter

1
Не працював для мене RStudio 1.1.442 все ще отримувавWarning message: Unknown or uninitialised column: 'bad_column'
andemexoax

3

У мене була ця проблема, коли працювали з функціями tibble та lapply разом. Tibble, здавалося, зберігає речі як список всередині фрейму даних.

Я вирішив це за допомогою unlist перед тим, як додати в таблицю результати функції lapply.


1

Я також зіткнувся з цією проблемою, за винятком тиблиці, створеної за допомогою блоку dyplyr. Ось невелика модифікація коду sabre, щоб показати, як я прийшов до тієї ж помилки.

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

1

Скажімо, я хотів вибрати наступні стовпці

best.columns = 'id'

Для мене таке попередження:

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

Хоча це працювало як очікувалося, хоча, наскільки я знаю dplyr, це повинно бути ідентичним.

df%>% select_(.dots = best.columns)

0

Я отримую ці застереження, коли перейменую стовпець, використовуючи, dplyr::renameпрочитавши його за допомогою readrпакета.

Стара назва стовпця не перейменована в specатрибут. Таким чином, видалення specатрибуту змушує попередження пропадати. Також видалення класу "spec_tbl_df" здається гарною ідеєю.

attr(dat, "spec") <- NULL
class(dat) <- setdiff(class(dat), "spec_tbl_df")
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.