如果x是一个向量,这就是rnorm(x)的作用吗?我怎么能更快地找到它?

时间:2018-05-18 21:51:56

标签: r

我正在寻找R资源,我开始在r-project.org上查看“R简介”here。我做了,立刻就难倒了。

我想我已经弄清楚发生了什么,我的问题基本上是

  • 是否有资源帮助我更多地了解这样的事情 容易吗

R简介的序言建议从附录A中的介绍性会议开始,一开始是这段代码和备注。

x <- rnorm(50)
y <- rnorm(x)

Generate two pseudo-random normal vectors of x- and y-coordinates.

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

到目前为止一切顺利。但为什么rnorm(x)似乎做了y <- rnorm(50)y <- rnorm(length(x))会做的事情?这些替代方案中的任何一个对我来说都更清楚。

我猜这是怎么回事:

  1. rnorm的包装器并不关心x是什么类型的东西,只是将struct的指针传递给底层C函数x作为R对象。

  2. C表示的R对象是结构,后跟“data”;实数的R向量的C表示的数据以两个整数开始,第一个是向量的长度。 (向量元素遵循这些整数。)我通过阅读R internals here找到了这一点。

  3. 如果编写了一个C函数来从传递的指针到R对象中找到R整数的值,并且用一个指向R向量的实数的指针调用它,它会找到向量的在它所寻找单个整数的地方的长度。

  4. 除了我的主要问题“我怎样才能更容易地弄清楚这样的事情?”之外,我不介意知道我认为发生的事情是否正确以及rnorm(x)是否正确在这种情况下的惯用R或更多的草率选择。鉴于它有用的东西,是否可以依赖它,或者它只是一个在R中没有明确定义的表达式的幸运行为?

    我习惯于强类型语言,如C或SQL,它们更容易理解(对我来说)语义,并且还提供更全面的引用,因此对R的任何引用都有编程语言 - 理论重点或针对那些习惯强力打字的人也会很好。

1 个答案:

答案 0 :(得分:9)

记录的行为。来自?rnorm

  

用法:[...]

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

参数:   [...]

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