【问题标题】:Meaning of a statement in r?r 中语句的含义?
【发布时间】:2017-04-13 00:22:56
【问题描述】:

我正在尝试调试R 中的代码以了解它。声明如下:

library(rpart)
X = read.csv("strange_binary.csv");
fit  = rpart(c ~ X + X.1 + X.2 + X.3 + X.4 + X.5 + X.6 + X.7 + X.8 + X.9, method ="class",data=X,minbucket=1,cp=.04);
printcp(fit);
fit = prune(fit,cp=.04);

pred = predict(fit,X[,1:10],type="vector")      # test the classifier on the training data
pred[pred == 2] = "bad"
pred[pred == 1] = "good"

目的是建立一个分类器并在训练数据上对其进行测试。但是,我不明白这些陈述:

pred[pred == 2] = "bad"
pred[pred == 1] = "good"

pred==2pred==1 将是 TRUEFALSE - 它如何用于索引向量?抱歉,我的问题很幼稚,我来自 C++ 背景,并在 R 中迈出了第一步。

感谢您的帮助!

【问题讨论】:

  • 您可以使用逻辑向量来选择数组元素。输入?"[" 寻求帮助。
  • 试试x = c("a", "b", "c", "d"); x[c(FALSE, TRUE, TRUE, FALSE)]。像这样的逻辑索引/子集在 R 中很常见。
  • pred 是来自predict 结果的向量。所以看起来模型预测结果为 1 或 2,而该语句只是将结果分别更改为字符串“好”和“坏”。
  • @epi99,您能详细说明一下吗?我正在使用标准函数predict() 进行预测。那么这如何将预测值限制为12strange_binary.csv 文件的值是 01
  • 您是否期待来自predict() 的不同输出? predict 是一个通用函数,其作用取决于您传递给它的模型拟合类型以及您提供的 type 参数。我假设对于您的模型,获得预测类,即只有 12,是有意义的。如果您想要其他类型的预测,您应该探索适用于您的特定模型的 type 选项。

标签: r classification training-data


【解决方案1】:

这是一种说法: 将值“bad”分配给 pred 的子集,其中 pred 等于 2

pred[pred == 2] = "bad"

将值“good”分配给 pred 的子集,其中 pred 等于 1

pred[pred == 1] = "good"

更类似于 R 的赋值方式如下所示:

pred[pred == 2] <- "bad"
pred[pred == 1] <- "good"

因此它基于 pred 等于这两个值中的一个或另一个的逻辑创建类。

编辑:

因为您在评论中也询问了它是什么。我建议一次在一行以上执行您的代码。在每个阶段,您都可以通过使用:str() 查看新变量的结构来查看发生了什么变化。它将通过一些示例为您提供数据的维度和类型。

str(fit)
str(pred)

它将帮助您了解每一步发生的情况。

【讨论】:

  • 我不认为使用&lt;- 进行分配“更像R”。这主要是个人喜好,在这种情况下没有区别。
  • pred 到底是什么?我的意思是问,pred 的哪一列(或哪一行)会受到影响?为什么在那个上?
  • 我相信大多数风格指南仍然推荐&lt;- 进行分配。在大多数情况下可能没有区别,但在某些情况下确实如此。见stackoverflow.com/questions/1741820/…
  • pred 是您将 pred = predict(fit,X[,1:10],type="vector") 的结果分配给的变量,它是前两行方程的预测结果。 @marius,任何一种分配方式都是完全可以接受和等效的,因此会起作用,这只是 R 中的分配约定。这不是我解释的重点,只是我认为 R 的新手如果他们可能需要的东西不习惯,可能会在其他解释中找到它。
猜你喜欢
  • 2014-05-16
  • 2023-03-28
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 1970-01-01
相关资源
最近更新 更多