2015-07-31 66 views
5

Câu hỏi này tương tự như một số câu hỏi khác trên Stackoverflow (here, herehere), nhưng đủ khác nhau để Tôi không thể ngoại suy những câu trả lời đó cho trường hợp của tôi.trong R: Lỗi trong is.data.frame (dữ liệu): đối tượng '' không được tìm thấy, âm mưu C5.0

Tôi có một chức năng trong đó tôi phù hợp với mô hình C5.0 và cố gắng vẽ mô hình.

train_d <- globald[train_ind,c(features,21)] 
model <- C5.0(binclass ~ .,data=train_d,trials=10) 

binclass là một tên cột trong dữ liệu huấn luyện/thử nghiệm của tôi (globald là một dataframe từ mà tôi tập hợp con hàng với _ind chỉ số và cột c(3:12,21), nơi cột 21 được đặt tên binclass). Lắp đặt hoạt động tốt. Tuy nhiên, khi tôi cũng thêm dòng

plot(model,trial=0) 

thì tôi nhận được lỗi sau: Error in is.data.frame(data) : object 'train_d' not found.

Làm thế nào để lắp ráp và sử dụng đúng cách train_d, nhưng trong khi vẽ đồ thị, train_d không tìm thấy ở đâu? Và, bất kỳ đề xuất nào về cách giải quyết vấn đề này. Không gian tên trong [r] vẫn là một bí ẩn đối với tôi.

Một ví dụ chạy tối thiểu như sau:

f <- function(){ 
    library(C50) 
    set.seed(1) 
    class = c(1,2) 
    d <- data.frame(feature1 = sample(1:10,10,replace=TRUE), feature2 = 1:10, binclass = class) 
    d$binclass <- as.factor(d$binclass) 
    model <- C5.0(binclass ~ ., data=d) 
    plot(model) 
} 

Calling f() kết quả trong các lỗi sau: Error in is.data.frame(data) : object 'd' not found

Edit: Theo câu trả lời từ MrFlick, có vẻ như rằng nguyên nhân của vấn đề này là một lỗi trong mã C5.0. Có một số cách giải quyết được chỉ ra bởi Pascal và MrFlick.

+3

"Câu hỏi khác" nào? Và không có một ví dụ tái sản xuất, nó sẽ phức tạp để có được một câu trả lời. –

+1

Điều này không có vẻ giống như vấn đề về không gian tên nhiều như vấn đề phạm vi có thể xảy ra. Tuy nhiên nó không phải rất rõ ràng từ các thông tin bạn cung cấp. Bạn nên bao gồm một [ví dụ tái sản xuất] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) làm cho nó rõ ràng chính xác những gì bạn đang làm. – MrFlick

+0

@Pascal: một ví dụ làm việc tối thiểu được cung cấp. Tôi không biết nếu đó là một không gian tên của một vấn đề phạm vi. Đó là một vấn đề mà tôi muốn xem giải quyết ... – user989762

Trả lời

3

Dường như có lỗi trong mã khi nói đến việc đánh giá lệnh trong môi trường thích hợp. Sự cố dường như nằm trong hàm C50::model.frame.C5.0. Công việc "sạch" xung quanh tôi có thể tìm thấy là thêm thuộc tính terms vào mô hình của bạn. Điều này sẽ giúp đóng gói môi trường chức năng.

f <- function(){ 
    library(C50) 
    set.seed(1) 
    class = c(1,2) 
    d <- data.frame(feature1 = sample(1:10,10,replace=TRUE), feature2 = 1:10, binclass = class) 
    d$binclass <- as.factor(d$binclass) 
    model <- C5.0(binclass ~ ., data=d) 
    model$terms <- eval(model$call$formula) #<---- Added line 
    plot(model) 
} 
+0

Ok. Vì vậy, nó dường như là một lỗi trong C5.0? Cách giải quyết làm việc mặc dù và ít nhất là giảm thiểu vấn đề. – user989762

0

@MrFlick gần như đã có nhưng không hoàn toàn. Vấn đề này cho âm mưu đặc biệt khó chịu khi cố gắng truyền dữ liệu tùy ý và các tính năng đích đến phương pháp C50. Như đã chỉ ra bởi MrFlick, nó liên quan đến việc đổi tên các điều khoản. Bằng cách đổi tên các thuật ngữ x và y trong phương thức, hàm gọi hàm vẽ sẽ không bị lẫn lộn.

tree_model$call$x <- data_train[, -target_index] 
tree_model$call$y <- data_train[[target_feature]] 

Ví dụ, đây là một phương pháp để truyền dữ liệu tùy ý và một tính năng mục tiêu và vẫn có thể vẽ đồ thị kết quả:

boosted_trees <- function(data_train, target_feature, iter_choice) { 

    target_index <- grep(target_feature, colnames(data_train)) 
    model_boosted <- C5.0(x = data_train[, -target_index], y = data_train[[target_feature]], trial=iter_choice) 
    model_boosted$call$x <- data_train[, -target_index] 
    model_boosted$call$y <- data_train[[target_feature]] 
    return(model_boosted) 

} 

Đối tượng mô hình được trả về bởi phương pháp trên có thể được vẽ như bình thường.

model <- boosted_trees(data_train, 'my_target', 10) 
plot(model) 
Các vấn đề liên quan