在R中返回对象或多个变量(而不是数字)

时间:2014-05-28 13:25:15

标签: r return svm return-type

我正在我的R应用程序中训练多个SVM,我希望我的函数返回一个holder对象,稍后我可以在函数中轻松访问它们。

SVM创建如下:

svm.model <- svm(x=trainset,y=trainlabels)
svm.pred <- predict(svm.model,testset)

res <- table(pred = svm.pred, true = testlabels)  

我希望能够返回名为&#34; res&#34;或svm.model和svm.pred的表。任何会做的。

在面向对象的语言中,我会使用像Javas ArrayList这样的东西,但是常规列表(在很多帖子中都有建议)并没有完成它的工作。我无法放入任何这些价值观,如果我做到了,他们就得到了#34;解开了#34;并失去了它的结构。

更新 评论部分关于我是如何尝试使用列表完成此操作的好点。我做了以下事情:

result<-list()

for i in...
   result[i]<-svm.model
   result[i+1] <-svm.pred

我尝试过与上面相同的内容,但使用&#34; res&#34;(表格)。

我尝试的另一种方法是每次创建一个包含上一个列表的新列表:     结果&LT; -list(结果,svm.model,svm.pred)

它只给我一个长度为3的大小列表(我明白为什么),最后两个值是&#34;列表&#34;而不是它们实际上是什么,因此它不允许我调用&#34; table(pred = svm.pred,true = testlabels)&#34;因为它返回错误:

&#34; sort.list(y)出错:&#39; x&#39;对于&#39; sort.list&#39;必须是原子的 你有没有打过电话&#39;排序&#39;在列表上?&#34;

2 个答案:

答案 0 :(得分:2)

如果你有一个循环而你想存储所有这三个

result<-list()
for (i in 1:n) {
    ...
    svm.model <- svm(x=trainset,y=trainlabels)
    svm.pred <- predict(svm.model,testset)

    res <- table(pred = svm.pred, true = testlabels)  
    result[[i]] <- list(res=res, svm.model=svm.model, svm.pred=svm.pred)
}

注意将项目放入列表并将其删除时使用[[ ]]很重要。我还在这里使用了一个命名列表,以便更容易地获取特定对象。然后,如果你想从第三个循环重新制作表,你可以做

table(pred = result[[3]]$svm.pred, true=testlabels)

答案 1 :(得分:0)

谢谢你的回答!我设法通过以下方式克服它:

result[folders[i]]<-list(res)

其中文件夹是名称的向量。 : - )