我正在尝试使用功能作为响应变量来运行RF。我无法通过变量传递字符串以用作RF中的响应。首先,我尝试在通过变量传递的字符串上运行RF作为响应,并且我得到一个"向量长度不同的错误"。在此之后,我尝试输入实际的字符串(功能)作为响应,它工作正常。你能否谈谈变量长度不同的原因?谢谢。
> colnames(Data[1])
[1] "feature1"
> rf.file = randomForest(formula =colnames(Data[1])~ ., data = Data, proximity = T, importance = T, ntree = 500, nodesize = 3)
Error in model.frame.default(formula = colnames(Data[1]) ~ ., :
variable lengths differ (found for 'feature1')
Enter a frame number, or 0 to exit
1: randomForest(formula = colnames(Data[1]) ~ ., data = Data, proximity = T, importance = T, ntree = 500, nodesize = 3)
2: randomForest.formula(formula = colnames(Data[1]) ~ ., data = brainDataTrim, proximity = T, importance = T, ntree = 500, nodesize = 3)
3: eval(m, parent.frame())
4: eval(expr, envir, enclos)
5: model.frame(formula = colnames(Data[1]) ~ ., data = Data, na.action = function (object, ...)
6: model.frame.default(formula = colnames(Data[1]) ~ ., data = Data, na.action = function (object, ...)
Selection: 0
> rf.file = randomForest(formula =feature1~ ., data = Data, proximity = T, importance = T, ntree = 500, nodesize = 3)
> rf.file
Call:
randomForest(formula = feature1 ~ ., data = Data, proximity = T, importance = T, ntree = 500, nodesize = 3)
Type of random forest: regression
Number of trees: 500
No. of variables tried at each split: 3
Mean of squared residuals: 0.1536834
% Var explained: 34.21
>
答案 0 :(得分:3)
你只是误解了公式的运作方式。基本上,你的第一次尝试不是假设可以工作。
公式应该包含变量的名称,可能是它们的简单函数。 e.g。
var1 ~ var2
var1 ~ log(var2)
注意缺少报价。如果你没有引用它,它不是一个字符串,它是一个符号。
因此,请避免在公式中使用原始字符串,奇怪的评估要求(如Data[1]
或使用$
)。要从字符串构造公式,将其粘贴在一起,然后在结果字符串上调用as.formula
。
请记住,公式的重点在于您提供了模型的符号表示,然后R将查找您在提供的数据框中命名的特定列。
我认为有些函数会为你强制执行公式的字符串表示(例如"var1 ~ var2"
),但我不会指望或期望它。