2012-07-18 25 views
18

Tôi có một chức năng trong đó tôi xác định một số data.frame mà tôi sử dụng vòng lặp để điền dữ liệu. Tại một số điểm tôi nhận được thông báo Cảnh báo:Thay đổi chuỗiCài đặt máy chủ cho dữ liệu.frame

thông điệp cảnh báo: 1: Trong [<-.factor (*tmp*, iseq, value = "THAY ĐỔI"): mức yếu tố không hợp lệ, NA tạo

Do đó, khi tôi xác định data.frame của mình, tôi muốn đặt tùy chọn stringsAsFactors thành FALSE nhưng tôi không hiểu cách thực hiện.

Tôi đã thử:

DataFrame = data.frame(stringsAsFactors=FALSE) 

và cũng:

options(stringsAsFactors=FALSE) 

cách chính xác để thiết lập các tùy chọn stringsAsFactors là gì?

+0

xem http://stackoverflow.com/questions/2851015/r-convert-data-frame-columns-from-factors-to-characters – GSee

Trả lời

26

Tùy thuộc vào cách bạn lấp đầy khung dữ liệu mà bạn chưa đưa ra bất kỳ mã nào. Khi bạn xây dựng một khung dữ liệu mới, bạn có thể làm t như thế này:

x <- data.frame(aName = aVector, bName = bVector, stringsAsFactors = FALSE) 

Trong trường hợp này, nếu ví dụ aVector là một vector ký tự, sau đó cột dataframe x$aName cũng sẽ là một vectơ ký tự, và không phải là một yếu tố. Kết hợp với khung dữ liệu hiện có (sử dụng rbind, cbind hoặc tương tự) nên giữ nguyên chế độ đó.

Khi bạn thực hiện

options(stringsAsFactors = FALSE) 

bạn thay đổi các thiết lập mặc định toàn cầu. Vì vậy, mọi khung dữ liệu bạn tạo sau khi thực hiện dòng đó sẽ không tự động chuyển đổi thành các yếu tố trừ khi được yêu cầu làm như vậy một cách rõ ràng. Nếu bạn chỉ cần tránh chuyển đổi ở một nơi, thì tôi không muốn thay đổi mặc định. Tuy nhiên, nếu điều này ảnh hưởng đến nhiều nơi trong mã của bạn, việc thay đổi mặc định có vẻ là một ý tưởng hay.

Một điều nữa: nếu véc tơ của bạn đã là một yếu tố, thì cả hai yếu tố trên sẽ không thay đổi lại thành vectơ ký tự. Để làm như vậy, bạn nên chuyển đổi nó một cách rõ ràng bằng cách sử dụng as.character hoặc tương tự.

+0

Cảm ơn 'điều khác' có vẻ như lỗi của tôi xuất phát từ đó. – VincentH

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