r - 如果x是向量,这是rnorm(x)的工作,我怎么能更快地找到它?

标签 r

我正在寻找R资源,然后开始在r-project.org上查看“R简介” here。我做到了,立即陷入了困境。

我想我已经知道发生了什么,我的问题基本上是

  • 是否有资源可以帮助我找出更多类似的信息
    容易地?

  • R简介的前言建议从附录A中的介绍性 session 开始,并且正好是此代码和备注。
    x <- rnorm(50)
    y <- rnorm(x)
    
    Generate two pseudo-random normal vectors of x- and y-coordinates.
    

    文档说rnorm的(第一个也是唯一的非可选)参数是结果向量的长度。因此,x <- rnorm(50)从正态分布中产生平均值为0,标准差为1的50个随机值的向量。

    到现在为止还挺好。但是,为什么rnorm(x)似乎可以完成y <- rnorm(50)y <- rnorm(length(x))会做的事情?这些替代方法中的任何一种在我看来都更加清晰。

    我对发生的事情的猜测是:
  • rnorm的包装器并不关心x是什么类型,只是将指向struct的C x的指针作为R对象传递给底层C函数。
  • 用C表示的
  • R对象是后跟“data”的结构;实数的R向量的C表示形式的数据以两个整数开头,其中第一个为向量的长度。 (向量元素跟随这些整数。)我通过阅读R internals here来发现这一点。
  • 如果编写C函数以从传递的指向R对象的指针中找到R整数的值,并使用指向实数R向量的指针对其进行调用,它将在该位置找到该向量的长度将查找单个整数。

  • 除了我的主要问题“如何更轻松地找出类似的东西?”之外,我不介意知道我认为正在发生的事情是否正确以及在这种情况下rnorm(x)是否是惯用R的事实或更多。一个草率的选择。鉴于它可以做些有用的事情,对于R中未明确定义的表达式,它是否可以被依赖还是仅仅是幸运的行为?

    我习惯于使用强类型语言(例如C或SQL),这些语言具有易于理解的语言(对我而言),并且还具有更全面的引用,因此,对于R的任何引用都以编程语言理论为重点或针对那些习惯于强类型打字的人也将是一件好事。

    最佳答案

    它已记录为行为。从?rnorm:

    Usage: [...]

     rnorm(n, mean = 0, sd = 1)
    

    Arguments: [...]

       n: number of observations. If ‘length(n) > 1’, the length is
          taken to be the number required.
    

    关于r - 如果x是向量,这是rnorm(x)的工作,我怎么能更快地找到它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50419690/

    相关文章:

    r - 如何计算R中不同点之间的过渡次数

    r - ggplot geom_bar 与 stat = "sum"

    r - 打印当前的随机种子,以便稍后可以使用set.seed()输入

    r - 修改 r 笔记本中的参数

    r - 使用 Shiny 的文本输入和 dplyr 来过滤数据框中的行

    r - 将 networkD3 图形导出为矢量图形

    R从ctree(partykit)中提取内部节点信息和拆分

    r - 使用受限三次样条预测新数据的值

    在 Shiny 应用程序中,rhandsontable 下拉菜单缩短了

    c - 在 R 中应用 "while(a[++i] < v )"