แก้ไขคำเตือนหลายคอลัมน์“ ไม่ทราบคอลัมน์”


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แพคเกจที่นำมาใช้ใน v1.1: blog.rstudio.org/2016/07/05/tibble-1-1 คุณtibbleโหลดอย่างชัดเจนหรือไม่
dpprdan

5
สิ่งนี้เกิดขึ้นกับฉันเช่นกัน ฉันสามารถทำซ้ำรูปแบบบนคอมพิวเตอร์หลาย ๆ เครื่อง แต่คำเตือนปรากฏขึ้นแบบสุ่มหลังจากคำสั่งบางอย่างเช่นไลบรารี่ (Hmisc) หรือสร้าง dataframe ด้วย dplyr คำเตือนอ้างอิงถึงคอลัมน์ที่ฉันยังไม่ได้ทำฉันจะสร้างมันในภายหลังในรหัสของฉัน ฉันรีสตาร์ท R และ Rstudio หลายครั้งและการรันโค้ดนั้นไม่ได้ช่วยอะไร นี่คืออะไร???
โนวา

คำตอบ:


58

นี่เป็นปัญหาของเครื่องมือการวินิจฉัยใน RStudio (เครื่องมือที่แสดงคำเตือนและข้อผิดพลาดที่อาจเกิดขึ้นในรหัสของคุณ) มันเป็นบางส่วนคงที่นี้กระทำใน RStudio v1.1.103 หรือในภายหลังโดย@ kevin-ushey การแก้ไขเป็นบางส่วนเนื่องจากคำเตือนยังคงปรากฏขึ้น (แม้ว่าจะมีความถี่น้อยกว่า) ปัญหานี้ได้รับการรายงานพร้อมกับตัวอย่างที่ทำซ้ำได้ที่https://github.com/rstudio/rstudio/issues/7372และได้รับการแก้ไขตามคำขอ pullt ของ RStudio v1.4 (จะนำออกใช้)

มีวิธีแก้ไขปัญหาหลายวิธีให้เลือกโซลูชันที่คุณต้องการ:

  • ปิดใช้งานการวินิจฉัยรหัสสำหรับไฟล์ทั้งหมดในการตั้งค่า / รหัส / การวินิจฉัย

  • ปิดใช้งานการวินิจฉัยทั้งหมดสำหรับไฟล์เฉพาะ:

    เพิ่มที่จุดเริ่มต้นของไฟล์ที่เปิด:

     # !diagnostics off

    จากนั้นให้บันทึกไฟล์และคำเตือนควรหยุดปรากฏขึ้น

  • ปิดใช้งานการวินิจฉัยสำหรับตัวแปรที่ทำให้เกิดคำเตือน

    เพิ่มที่จุดเริ่มต้นของไฟล์ที่เปิด:

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

    จากนั้นให้บันทึกไฟล์และคำเตือนควรหยุดปรากฏขึ้น

คำเตือนปรากฏขึ้นเนื่องจากเครื่องมือการวินิจฉัยใน RStudio แยกวิเคราะห์ซอร์สโค้ดเพื่อตรวจหาข้อผิดพลาดและเมื่อทำการตรวจสอบวินิจฉัยจะเข้าใช้คอลัมน์ในแท็บเล็ตที่ไม่ได้กำหนดค่าเริ่มต้นโดยให้คำเตือนที่เราเห็น คำเตือนไม่ปรากฏขึ้นเนื่องจากคุณรันสิ่งที่ไม่เกี่ยวข้องซึ่งจะปรากฏขึ้นเมื่อมีการเรียกใช้การวิเคราะห์ RStudio (เมื่อไฟล์ถูกบันทึกจากนั้นแก้ไขเมื่อคุณเรียกใช้บางสิ่ง ... )


13
โทรดี สิ่งนี้ใช้ได้กับฉันใน RStudio 0.99 ให้ยกเลิกการเลือก 'แสดงการวินิจฉัยสำหรับ r' ภายใต้เครื่องมือ> ตัวเลือกระดับโลก> รหัส> การวินิจฉัย
Chris Holbrook

8
RStudio 1.1.383 พร้อม R 3.4.3 ยังคงมีปัญหาอยู่
MS Berends

4
ปัญหายังคงมีอยู่ในรุ่น 1.1.423 การยกเลิกการเลือก 'แสดงการวินิจฉัย' ทำงานได้ดี
Adrian

2
ยังคงมีอยู่ v1.1.456 ถอนหายใจ
geotheory

3
Sill มี RStudio v1.1.643 พร้อม R v3.5.1 บนเซิร์ฟเวอร์ RStudio บน Ubuntu
RFelber

49

ฉันประสบปัญหาเดียวกันอยู่แล้วและถึงแม้ว่าฉันไม่รู้ว่าทำไมมันถึงเกิดขึ้น แต่ฉันสามารถตรึงลงได้เมื่อมันเกิดขึ้นและป้องกันไม่ให้เกิดขึ้น

ดูเหมือนว่าปัญหาจะเกิดขึ้นกับการเพิ่มในคอลัมน์ใหม่ซึ่งได้มาจากการจัดทำดัชนีในฐานข้อมูล R เทียบกับเฟรมข้อมูล tibble ใช้ตัวอย่างนี้ซึ่งคุณเพิ่มคอลัมน์ใหม่ ( age) ลงในกรอบข้อมูล R ฐาน:

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

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

ใช้งานได้โดยไม่มีการเตือนกลับ แต่เมื่อทำเช่นเดียวกันกับ tibble มันจะส่งสัญญาณเตือน (และดังนั้นฉันคิดว่าทำให้เกิดปัญหาแปลก ๆ ที่ดูเหมือนไม่ได้รับการเตือนและหลายคำเตือน):

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
คำตอบของฉันเป็นอย่างชัดเจนไม่เรื่องราวทั้งหมด: ฉันยังคงได้รับ (หลาย) คำเตือนและเป็นผู้แสดงความคิดเห็นอื่น ๆ ที่พาดพิงถึงส่วนที่น่าผิดหวังเป็นที่ชัดเจนเด็ดขาดของมัน A tbl_dfดูเหมือนจะจำเป็นในการสร้างคำเตือน แต่ฉันไม่แน่ใจว่าเพียงพอ นั่นคือฉันคิดว่าคำเตือนนี้อาจปรากฏขึ้นเมื่อtbl_dfใช้ร่วมกับฟังก์ชั่นจากแพคเกจ 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

Tibbles ออกแบบโดยเข้มงวดกว่า data.frames อาจเป็นเพราะการออกแบบที่คุณไม่ควรจะเริ่มคอลัมน์ด้วยการกำหนดเพียงบางส่วน อย่างไรก็ตามหากนี่เป็นคุณสมบัติป้องกันและไม่ใช่ข้อผิดพลาดในการออกแบบดังนั้นข้อผิดพลาดครั้งแรกในการกำหนด tibble จะเป็นที่นิยมมากกว่า
vinnief

17

ฉันประสบปัญหานี้เมื่อใช้แพ็คเกจ "dplyr"
สำหรับผู้ที่ประสบปัญหานี้หลังจากใช้ฟังก์ชัน "group_by" ในไลบรารี "dplyr":

ฉันพบว่าการยกเลิกการจัดกลุ่มตัวแปรจะช่วยแก้ปัญหาการเตือนคอลัมน์ที่ไม่รู้จัก บางครั้งฉันต้องย้ำผ่าน ungrouping หลายครั้งจนกว่าปัญหาจะได้รับการแก้ไข


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


มันทำงานเหมือนจับใจ ฉันสงสัยว่าจะมีข้อเสียใด ๆ ในการแปลงเป็นเฟรมข้อมูลแล้วแปลงกลับเป็น tibble มันเป็นเพียงการเตือนว่ามันจะหายไป?
p130ter

1
ไม่ได้ผลสำหรับฉัน RStudio 1.1.442 ยังคงได้รับWarning message: Unknown or uninitialised column: 'bad_column'
andemexoax

3

ฉันมีปัญหานี้เมื่อจัดการกับ tibble และ lapply ทำงานร่วมกัน Tibble ดูเหมือนจะบันทึกสิ่งต่าง ๆ เป็นรายการภายใน dataframe

ฉันแก้ไขมันโดยใช้ unlist ก่อนเพิ่มผลลัพธ์ของฟังก์ชัน lapply ใน tibble


1

ฉันวิ่งเข้าไปในปัญหานี้เช่นกันยกเว้นผ่าน tibble ที่สร้างขึ้นโดยใช้บล็อก 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")
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.