【问题标题】:Learning R for someone used to MATLAB, and confusion with R data types为习惯 MATLAB 的人学习 R,并与 R 数据类型混淆
【发布时间】:2013-02-25 07:56:06
【问题描述】:

是否有简明(但相当全面)的教程让人们习惯于在 MATLAB 中工作,以加快编写 R 代码的速度。

这是我想到的一个特殊问题:根据我对 R 文档和教程的有限经验,我对 R 中的数据类型以及如何操作它们感到很困惑。例如,什么是向量、矩阵、列表、数据框等以及它们之间的关系。我还没有找到清楚地解释基本数据类型的来源,以至于我想知道该语言是否在设计上是模棱两可的。

【问题讨论】:

标签: r


【解决方案1】:

如果您主要只熟悉一种编程语言,但当您尝试学习另一种工作方式不同的编程语言时总是很困难,因为您希望以不同的方式思考问题,而这些错误的期望会导致问题。很难有一个适合来自其他每种语言的学生的介绍性指南(“你会认为你应该做 X,但在 R 中,你应该做 Y”)。但是,我可以向您保证,R 的设计初衷并非模棱两可。

大多数情况下,您只需要获得一份介绍性指南并费力地完成它。起初,这将是很多工作,令人沮丧,但这是唯一的方法。最后,它会变得更容易。也许我可以告诉你几件事来启动这个过程:

  • list 只是一组有序的元素。这可以是任何长度,并且包含任何旧类型的东西。例如,x <- list(5, "word", TRUE)
  • vector 也是一组有序的元素。尽管它可以是任意长度,但元素必须都是同一类型。例如,x <- c(3,5,4)x <- c("letter", "word", "a phrase")x <- c(TRUE, FALSE, FALSE, TRUE)
  • a matrix 是向量的向量,其中所有分量向量具有相同的长度和类型。例如,x <- matrix(c("a", "b", "c", "d"), ncol=2)
  • data.frame 是一个向量列表,其中所有分量向量的长度相同,但不必是相同类型。例如,x <- data.frame(category=c("blue", "green"), amount=c(5, 30), condition.met=c(TRUE, FALSE))

(对 cme​​ts 的回应:)

  • 函数?c用于连接c(c("a", "b"), c("c", "d")),不会创建矩阵,而是从两个较短的向量中创建一个较长的向量。函数?cbind(将列绑定在一起)或rbind()(将行绑定在一起)将创建一个矩阵。
  • 我不知道有哪个函数可以输出任何对象的类型。最接近的可能是?class,但这有时会给出,例如,“整数”,我认为你想要“向量”。还有mode()typeof(),它们是相关的,但并不完全符合您的要求。详细了解这些 herehere 之间的区别。要检查对象是否为特定类型,您可以使用is.<specific type>(),例如?is.vector
  • 要将对象强制(即“强制转换”)到特定类型,您可以使用as.vector(),但这仅在满足条件(例如,上述)时才有效。

【讨论】:

  • +1 作为一个在我接触 R 时对 Matlab 相当了解的人(尽管我在多年前使用过 S),我绝对建议了解 R 列表是什么以及如何使用他们工作。从某种意义上说,它们非常像 R 的通用主力。我认为我不需要担心它们可能会阻碍我在 R 方面的进步,远远超过我愿意承认的程度。特别是,当您意识到它们是列表时,数据框 更有意义。另一件大事是掌握编写小函数作为其他函数的参数;这是 R 中的标准范例。
  • 谢谢。所以我假设 c(c("a","b"),c("c","d")) 应该是与您定义的矩阵相同的对象?另外,是否有一个函数可以输出对象是什么类型?按类型,我的意思是列表/向量/矩阵/数据框(不是双精度/整数...)。另一个问题:是否可以在这些类型之间进行转换?例如,如果我定义 x
猜你喜欢
  • 2019-06-11
  • 2014-04-05
  • 2013-08-25
  • 2015-10-01
  • 2017-07-16
  • 2015-08-05
  • 2019-01-22
  • 2020-07-25
  • 1970-01-01
相关资源
最近更新 更多