为了下面的讨论,我将创建这个假的训练数据框:
> dataset = data.frame(result=c("yes","yes","no","no","no"),
s1=seq(0,8,2), s2=seq(1,9,2))
> dataset
result s1 s2
1 yes 0 1
2 yes 2 3
3 no 4 5
4 no 6 7
5 no 8 9
>
Run Code Online (Sandbox Code Playgroud)
我正在尝试从类似于上面所示的多个数据帧训练多个kernlab KSVM模型.result实际上,对于每个数据框,该列的名称都是不同的(它是根据该数据集训练的模型应该预测的名称命名的).
我仍然是R的新手,所以我正在使用的语法只是在我从Rattle的日志选项卡中剪切和粘贴的代码之后建模(没有双关语):
trainedModel = ksvm(as.factor(result) ~ ., data=dataset[,c(input, target), ...)
Run Code Online (Sandbox Code Playgroud)
... ... 数据框中result列的名称dataset.我明白这as.factor(result) ~ .是一个公式,这意味着它的左侧的东西~是以某种方式从右侧的东西中得到的~,而这.只是意味着"其他一切未在左侧指定的~".至少我认为这意味着什么.
我的问题是我希望能够以编程方式创建和训练这些模型,并且输入数据集中目标列的名称将会改变.
如何在代码中指定"colnames(dataset)[1]"(即,在编码时不知道列名称的情况下动态确定列的名称)as.factor(result)?
?as.formula,允许您使用构建公式paste.将这些放在一起可以创建基于变量的公式,例如:
as.formula(paste("as.factor(",result_column,") ~ ."))
Run Code Online (Sandbox Code Playgroud)