2015-07-13 22 views
6

Không mở bất kỳ tập tin, tôi nhận được lỗi sau khi mở Rstudio:Lỗi: cố gắng sử dụng zero-độ dài thay đổi tên

"Error: attempt to use zero-length variable name"

Tất cả các lệnh của tôi được bỏ qua (tức là không có gì xảy ra, không có cảnh báo và R trở nên bất tỉnh bất cứ điều gì tôi làm) và tôi đã thử rm và gc tùy chọn để không có sẵn và cũng cập nhật lên phiên bản mới nhất của Rstudio và R nhưng tôi vẫn nhận được lỗi này.

Tôi đang chạy các cửa sổ 7 (64bit).

+0

Hệ điều hành nào? Phiên bản R và RStudio nào (rõ ràng)? Bạn đã thiết lập tệp '.Rprofile' để tự động chạy mã khi khởi động chưa? Làm thế nào chính xác là các lệnh bỏ qua? Bạn có thấy lời nhắc tại bảng điều khiển không? – MrFlick

Trả lời

3

Tôi có cùng thông báo lỗi và nó có liên quan đến read_csv() từ gói readr của Hadley. Nếu tôi đã làm điều này:

cyt <- read_csv(fil) 
cyt2 <- cyt %>% filter(EPID == 10030001) 

sau đó tôi nhận được thông báo lỗi "Lỗi trong filter_impl (.data, dấu chấm): cố gắng sử dụng zero-length tên biến". Nhưng nếu tôi đã sử dụng hàm read.csv() tương tự thì nó hoạt động OK.

cyt <- read.csv(fil, stringsAsFactors = FALSE) 
cyt2 <- cyt %>% filter(EPID == 10030001) 

Tôi nghĩ đây có thể là lỗi trong read_csv() hoặc có lẽ tôi đang lạm dụng read_csv().


Trong trường hợp cụ thể của bạn, có thể có gì đó đang chạy tự động khi bạn đang tải RStudio.

+1

Tôi có cùng một vấn đề chính xác và thay thế bằng read.csv đã giải quyết nó. –

8

Tôi đã đăng sự cố trên dplyr github page. Tôi có thể tái tạo các kết quả bằng cách sử dụng mã bên dưới. Nó có liên quan đến việc liệu csv có chứa một cột của rownames mà không có tiêu đề hay không. read_csvread.csv xử lý sự khác biệt này, do đó tạo ra các kết quả khác nhau với filter.

Đầu tiên là trường hợp khi nó hoạt động

write_csv để read_csv hoặc read.csv; cả hai làm việc tốt với filter

library(readr) 
library(dplyr) 

mtcars %>% write_csv("~/Desktop/test.csv") 
test_r <- read_csv("~/Desktop/test.csv") %>% filter(hp>100) 
test.r <- read.csv("~/Desktop/test.csv") %>% filter(hp>100) 

Bây giờ khi nó không thành công

Khi csv được tạo ra thông qua một quá trình như write.csv, trừ khi người đó thay đổi mặc định của row.names-FALSE, nó giới thiệu một cột của rownames w/oa header. Khi đọc dữ liệu trở lại, read_csv không điền vào tiêu đề có tên là, nhưng read.csv làm xáo trộn X. Vì vậy, khi filter hoạt động trên read.csv nhập, nó có tất cả tiêu đề có ô đầy, nhưng filter sau read_csv có tiêu đề trống tế bào ít nhất là nơi có tên gọi.

Các mã sau đây nên lỗi sau test1_r %>% filter(hp>100) với các lỗi sau

Error in filter_impl(.data, dots) : 
    attempt to use zero-length variable name 

Một lần nữa, sự khác biệt lớn là cách write.csv tạo ra csv.

mtcars %>% write.csv("~/Desktop/test1.csv") 


test1_r <- read_csv("~/Desktop/test1.csv") 
test1_r %>% str() 
#should fail here 
test1_r %>% filter(hp>100) 


test1.r <- read.csv("~/Desktop/test1.csv") 
test1.r %>% str() 
test1.r %>% filter(hp>100) 

Để giải quyết vấn đề, bạn có thể sử dụng read.csv như đã đề cập ở trên bởi @hackR.Hoặc bạn có thể tập hợp con ra cột đầu tiên khi bạn biết csv cư xử như thế này:

test1_r <- read_csv("~/Desktop/test1.csv")[-1] 

Hoặc, nếu bạn đang ở trong kiểm soát của bước csv sáng tạo, bạn có thể thêm tùy chọn row.names=FALSE-write.csv

mtcars %>% write.csv("~/Desktop/test2.csv", row.names = FALSE) 
test2.r <- read_csv("~/Desktop/test2.csv") 
test2.r %>% str() 
test2.r%>% filter(hp>100) 

hoặc sử dụng write_csv như được hiển thị ở trên.

+0

@skeletonnoire, địa chỉ này có vấn đề của bạn không? –

+0

Điều này cũng có thể xảy ra nếu tệp .csv của bạn có cột không có tiêu đề. – BLT

Các vấn đề liên quan