【问题标题】:Returning objects or multiple variables (not numbers) in R在 R 中返回对象或多个变量(不是数字)
【发布时间】:2014-05-28 13:25:15
【问题描述】:

我正在我的 R 应用程序中训练多个 SVM,并且我希望我的函数返回一个持有者对象,以便稍后在函数中轻松访问它们中的每一个。

SVM 是这样创建的:

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

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

我希望能够返回名为“res”的表,或者同时返回 svm.model 和 svm.pred。任何人都会做。

在面向对象的语言中,我会使用 Java ArrayList 之类的东西来执行此操作,但是常规列表(在许多帖子中都建议过)并没有起到作用。我无法输入任何这些值,如果我做到了,它们就会“解开”并失去其结构。

更新 评论部分的要点是关于我究竟是如何尝试使用列表来做到这一点的。我做了以下事情:

result<-list()

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

我已经尝试过与上面相同的方法,但使用“res”(表格)。

我尝试的另一种方法是每次都使用前一个列表创建一个新列表: 结果

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

"sort.list(y) 中的错误:'x' 对于 'sort.list' 必须是原子的 您是否在列表中调用了“排序”?”

【问题讨论】:

  • list 是执行此操作的 方式。看看有多少 R 函数返回 lists(或本质上是带有附加结构的 lists 的类)。如果list“没有完成它的工作”,那么如果您可以发布一个可重现的示例来说明究竟是什么不起作用,那就太好了。

标签: r return svm return-type


【解决方案1】:

如果你有一个循环并且你想存储所有三个

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)

【讨论】:

    【解决方案2】:

    感谢您的回答!我还通过执行以下操作来克服它:

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

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

    【讨论】:

    • result[[ folders[i] ]] &lt;- res 更有意义
    猜你喜欢
    • 2022-01-06
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多