Lỗi này khá dễ hiểu. Dường như có dữ liệu bị thiếu trong dòng đầu tiên của tệp dữ liệu của bạn (hoặc dòng thứ hai, vì trường hợp này có thể do bạn đang sử dụng header = TRUE
).
Dưới đây là một ví dụ nhỏ:
## Create a small dataset to play with
cat("V1 V2\nFirst 1 2\nSecond 2\nThird 3 8\n", file="test.txt")
R tự động phát hiện rằng nó nên mong đợi rownames cộng với hai cột (3 yếu tố), nhưng nó không tìm thấy 3 yếu tố trên dòng 2, vì vậy bạn nhận được một lỗi:
read.table("test.txt", header = TRUE)
# Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
# line 2 did not have 3 elements
nhìn vào tập tin dữ liệu và xem liệu có thực sự là một vấn đề:
cat(readLines("test.txt"), sep = "\n")
# V1 V2
# First 1 2
# Second 2
# Third 3 8
Manua Có thể cần điều chỉnh l hoặc chúng tôi có thể giả định giá trị đầu tiên trong hàng "Thứ hai" phải nằm trong cột đầu tiên và các giá trị khác phải là NA
. Nếu trường hợp này xảy ra, fill = TRUE
là đủ để giải quyết vấn đề của bạn.
read.table("test.txt", header = TRUE, fill = TRUE)
# V1 V2
# First 1 2
# Second 2 NA
# Third 3 8
R cũng đủ thông minh để con nó ra bao nhiêu yếu tố cần thiết ngay cả khi rownames đang thiếu:
cat("V1 V2\n1\n2 5\n3 8\n", file="test2.txt")
cat(readLines("test2.txt"), sep = "\n")
# V1 V2
# 1
# 2 5
# 3 8
read.table("test2.txt", header = TRUE)
# Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
# line 1 did not have 2 elements
read.table("test2.txt", header = TRUE, fill = TRUE)
# V1 V2
# 1 1 NA
# 2 2 5
# 3 3 8
Bạn cũng có thể đặt 'read.table (..., comment.char =" ")' để tắt cách diễn giải các nhận xét trong tệp. –
Các dấu nháy đơn cũng có thể gây ra nó ('). Sửa lỗi này bằng cách đặt tùy chọn quote = "\" " – Stuart