我将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)
双引号是否会产生错误?有什么可以解决这个问题?我有很多功能,所以我不能手动输入每个功能。
答案 0 :(得分: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 = "+")))
一种解决方法,而不是使用你的方法(NB:我从未使用过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])
OR
tree_pred <- rpart(train$left_eye_center_x ~ . , data = train4rpart)