0

我正在将 rpart 函数应用于名为 train 的具有所有整数值的数据框。功能太多,因此我创建了一个公式。

 columns_features <- (paste(colnames(train)[31:50], collapse = "+"))
 formulas <- as.formula(train$left_eye_center_x ~ columns_features)
 tree_pred <- rpart(formulas , data = train)

在这里,我收到错误消息

 Error in model.frame.default(formula = formulas, data = train, na.action = function (x)  : variable lengths differ (found for 'columns_features')

当我检查公式时,它有

 train$left_eye_center_x ~ columns_features

对于 column_features 它有

[1] "l_1+ l_2+ l_3+ l_4+ l_5+ l_6+ l_7+ l_8+ l_9+ l_10+ l_11+ l_12+ l_13+ l_14+ l_15+ l_16+ l_17+ l_18+ l_19+ l_20"

出于检查目的,当我在此处手动输入列名时,它可以工作

 formulas <- as.formula(train$left_eye_center_x ~ l_1+ l_2+ l_3+ l_4+ l_5+ l_6+ l_7+ l_8+ l_9+ l_10+ l_11+ l_12+ l_13+ l_14+ l_15+ l_16+ l_17+ l_18+ l_19+ l_20  )
 tree_pred <- rpart(formulas , data = train)

双引号是否会产生错误?有什么办法可以解决这个问题?我有很多功能,所以我无法手动输入每个功能。

4

1 回答 1

1

从 ?as.formula 示例中:

 ## Create a formula for a model with a large number of variables:
 xnam <- paste0("x", 1:25)
 (fmla <- as.formula(paste("y ~ ", paste(xnam, collapse= "+"))))

这意味着在您的情况下,以下内容应该有效:

formulas <- as.formula(paste("train$left_eye_center_x ~", paste(colnames(train)[31:50], collapse = "+")))

一种解决方法,而不是使用您的方法(注意:我从未使用过 rpart,但我相信这可行):

formulas <- as.formula(train$left_eye_center_x ~ .)  
tree_pred <- rpart(formulas , data = train[,31:50])

如果 rpart 不喜欢获取索引数据,您可以定义一个新的数据框:

train4rpart <- train[,31:50]
tree_pred <- rpart(formulas , data = train4rpart)

实际上,通读 ?rpart,您可以跳过整个公式:

tree_pred <- rpart(train$left_eye_center_x ~ . , data = train[,31:50])

或者

tree_pred <- rpart(train$left_eye_center_x ~ . , data = train4rpart)
于 2014-11-26T10:02:32.947 回答