Memperbaiki beberapa "kolom tidak dikenal" peringatan

170

Saya memiliki beberapa peringatan berulang "kolom tidak dikenal" untuk semua jenis perintah (mis. Str (x) untuk menginstal pembaruan pada paket), dan tidak yakin bagaimana cara men-debug ini atau memperbaikinya.

Peringatan "kolom tidak dikenal" jelas terkait dengan variabel dalam tbl_df yang saya beri nama baru, tetapi peringatan muncul di semua jenis perintah yang tampaknya tidak terkait dengan tbl_df (misalnya, menginstal pembaruan pada paket, str (x) di mana x adalah hanya sebuah vektor karakter).

ssp3nc3r
sumber
11
Saya menyadari bahwa pertanyaannya tidak jelas, tetapi tampaknya itulah masalahnya. Saya bahkan dapat mengetikkan omong kosong (mis. Salah ketik) dan menerima peringatan. Saya menduga ini persisten di lingkungan IDE itu sendiri, entah bagaimana?
ssp3nc3r
1
Bisakah Anda memposting perintah yang tepat dan output yang Anda dapatkan?
konvas
3
Ya, versi terbaru dari RStudio. Saya membersihkan lingkungan, memulai kembali, dan itu mulai terjadi ketika saya memuat di objek TBL_DF. Saya tampaknya telah memperbaiki masalah dengan mengubahnya menjadi as.data.frame, menutup semuanya lalu memuat kembali frame data. Ke depan, saya ingin memahami dua hal: bagaimana cara menghindari masalah menggunakan tbl_df dan mengapa peringatan tampaknya tetap ada di lingkungan.
ssp3nc3r
1
Saya mendapatkan kesalahan yang sama. Apakah FACEBOOK.1kolom di salah satu frame data Anda dan apakah Anda menyebutnya dengan df$FACEBOOK.1suatu tempat dalam skrip R Anda? Dugaan saya yang sederhana adalah bahwa ini adalah kesalahan dalam tibblepaket yang diperkenalkan di v1.1: blog.rstudio.org/2016/07/05/tibble-1-1 . Apakah Anda telah tibblememuat secara eksplisit?
dpprdan
5
Ini juga terjadi pada saya. Saya dapat mereproduksi pola pada banyak komputer tetapi peringatan itu muncul secara acak setelah beberapa perintah, misalnya library (Hmisc) atau membuat dataframe dengan dplyr. Peringatan merujuk pada kolom yang belum saya buat - saya membuatnya nanti dalam kode saya. Saya telah memulai ulang R dan Rstudio beberapa kali dan menjalankan kode bersih tidak membantu. Apa ini???
Nova

Jawaban:

57

Ini adalah masalah dengan alat Diagnostik di RStudio (alat yang menunjukkan peringatan dan kemungkinan kesalahan dalam kode Anda). Itu sebagian diperbaiki pada komit ini di RStudio v1.1.103 atau lebih baru oleh @ kevin-ushey . Cara mengatasinya parsial, karena peringatan masih muncul (walaupun dengan frekuensi lebih sedikit). Masalah ini telah dilaporkan dengan contoh yang dapat direproduksi di https://github.com/rstudio/rstudio/issues/7372 dan telah diperbaiki pada permintaan tarik RStudio v1.4 (akan dirilis)

Ada beberapa solusi yang tersedia, pilih solusi yang Anda inginkan:

  • Nonaktifkan diagnostik kode untuk semua file di Preferensi / Kode / Diagnostik

  • Nonaktifkan semua diagnostik untuk file tertentu:

    Tambahkan di awal file yang dibuka:

     # !diagnostics off

    Kemudian simpan file dan peringatan akan berhenti muncul.

  • Nonaktifkan diagnostik untuk variabel yang menyebabkan peringatan

    Tambahkan di awal file yang dibuka:

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

    Kemudian simpan file dan peringatan akan berhenti muncul.

Peringatan muncul karena alat diagnostik di RStudio mem-parsing kode sumber untuk mendeteksi kesalahan dan ketika melakukan pemeriksaan diagnostik itu mengakses kolom di tibble Anda yang tidak diinisialisasi, memberikan Peringatan yang kita lihat. Peringatan tidak muncul karena Anda menjalankan hal-hal yang tidak terkait, peringatan itu muncul ketika diagnostik RStudio dijalankan (ketika file disimpan, lalu dimodifikasi, saat Anda menjalankan sesuatu ...).

zeehio
sumber
13
panggilan yang bagus. Ini bekerja untuk saya di RStudio 0.99, hapus centang 'tunjukkan diagnostik untuk r' di bawah Alat> Opsi Global> Kode> Diagnostik
Chris Holbrook
8
RStudio 1.1.383 dengan R 3.4.3, masalah masih ada.
MS Berends
4
Masalah masih ada dengan versi 1.1.423. hapus centang 'tunjukkan diagnostik' berfungsi dengan baik
Adrian
2
Masih ada v1.1.456. Mendesah.
geoteori
3
Masih ada RStudio v1.1.643 dengan R v3.5.1 di RStudio Server di Ubuntu.
RFelber
49

Saya telah mengalami masalah yang sama, dan meskipun saya tidak tahu mengapa itu terjadi, saya sudah dapat menjabarkannya ketika itu terjadi, dan dengan demikian mencegahnya terjadi.

Masalahnya tampaknya dengan menambahkan dalam kolom baru, yang berasal dari pengindeksan, dalam kerangka data R dasar vs dalam kerangka data tibble. Ambil contoh ini, tempat Anda menambahkan kolom baru ( age) ke bingkai data R dasar:

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

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

Itu bekerja tanpa mengembalikan peringatan. Tetapi ketika hal yang sama dilakukan dengan tibble, ia memberikan peringatan (dan akibatnya, saya pikir menyebabkan masalah peringatan yang aneh, yang tampaknya tidak diprovokasi):

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' 

Pasti ada cara yang lebih baik untuk menghindari hal ini, tetapi saya telah menemukan bahwa pertama-tama membuat vektor NAs berfungsi:

tibble_df$age <- NA

tibble_df$age[tibble_df$name == "mary"] <- 47
pedang
sumber
13
Jawaban saya jelas bukan keseluruhan cerita: Saya masih mendapatkan (banyak) peringatan, dan seperti komentator lain singgung, bagian yang membuat frustrasi adalah kesewenang-wenangan yang terlihat jelas . Sebuah tbl_dftampaknya diperlukan untuk menghasilkan peringatan, tapi saya tidak yakin bahwa itu sudah cukup. Yaitu, saya pikir peringatan ini mungkin muncul ketika tbl_dfs digunakan bersama dengan fungsi dari paket tidyverse lainnya (misalnya, tidyr, dplyr). Harga kecil untuk membayar paket paket yang sangat penting, tapi tetap saja aneh / menjengkelkan.
saber
Membuat vektor NAs bekerja untuk saya! (RStudio Versi 1.1.456, R versi 3.5.1)
petzi
Kadang-kadang saya ingin menentukan jenis kolom, misalnya Tanggal R, dan jika saya mengisi NA, tanggal yang diisi kemudian akan dikonversi ke jenis numerik.
Jiāgěng
1
@ Jiāgěng as.Date(NA_character_)memberi NAdengan kelas Date.
Stibu
Tibbles secara desain lebih membatasi daripada data.frame. Mungkin dengan desain, bahwa Anda tidak seharusnya memulai kolom dengan menetapkan hanya sebagian untuk itu. Namun, jika ini adalah fitur pelindung dan bukan kesalahan desain, maka kesalahan satu kali awal dalam penugasan tibble akan jauh lebih disukai.
vinnief
17

Saya menghadapi masalah ini saat menggunakan paket "dplyr".
Bagi mereka yang menghadapi masalah ini setelah menggunakan fungsi "group_by" di perpustakaan "dplyr":

Saya telah menemukan bahwa memisahkan variabel-variabel memecahkan masalah peringatan kolom yang tidak diketahui. Kadang-kadang saya harus mengulangi beberapa kali ungrouping sampai masalah teratasi.

Varun
sumber
4

Mengubah kelas menjadi data.framememecahkan masalah bagi saya:

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"

Meminjam sebagian skrip dari @adts

Stok
sumber
itu bekerja seperti pesona. Saya bertanya-tanya apakah ada kelemahan untuk mengubahnya menjadi bingkai data dan kemudian mengubahnya kembali menjadi tibble. Apakah hanya peringatan yang hilang?
p130ter
1
Tidak bekerja untuk saya RStudio 1.1.442 masih mendapatkanWarning message: Unknown or uninitialised column: 'bad_column'
andemexoax
3

Saya memiliki masalah ini ketika berhadapan dengan fungsi tibble dan lapply bersama-sama. Tibble tampaknya menyimpan sesuatu sebagai daftar di dalam kerangka data.

Saya menyelesaikannya dengan menggunakan unlist sebelum menambahkan hasil dari fungsi lapply ke tibble.

michael joseph
sumber
1

Saya mengalami masalah ini juga kecuali melalui tibble yang dibuat menggunakan blok dyplyr. Berikut sedikit modifikasi dari kode sabre untuk menunjukkan bagaimana saya sampai pada kesalahan yang sama.

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
iklan
sumber
1

Katakanlah saya ingin memilih kolom berikut

best.columns = 'id'

Bagi saya yang berikut memberi peringatan:

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

Meskipun ini bekerja seperti yang diharapkan, meskipun, sejauh yang saya tahu dplyr, ini harus identik.

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

Saya mendapatkan peringatan ini ketika saya mengganti nama kolom dplyr::renamesetelah membacanya menggunakan readrpaket.

Nama kolom yang lama tidak diganti namanya di specatribut. Jadi menghapus specatribut membuat peringatan hilang. Juga menghapus kelas "spec_tbl_df" sepertinya ide yang bagus.

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