我正在寻找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))
会做的事情?这些替代方案中的任何一个对我来说都更清楚。
我猜这是怎么回事:
rnorm
的包装器并不关心x
是什么类型的东西,只是将struct
的指针传递给底层C函数x
作为R对象。
C表示的R对象是结构,后跟“data”;实数的R向量的C表示的数据以两个整数开始,第一个是向量的长度。 (向量元素遵循这些整数。)我通过阅读R internals here找到了这一点。
如果编写了一个C函数来从传递的指针到R对象中找到R整数的值,并且用一个指向R向量的实数的指针调用它,它会找到向量的在它所寻找单个整数的地方的长度。
除了我的主要问题“我怎样才能更容易地弄清楚这样的事情?”之外,我不介意知道我认为发生的事情是否正确以及rnorm(x)
是否正确在这种情况下的惯用R或更多的草率选择。鉴于它有用的东西,是否可以依赖它,或者它只是一个在R中没有明确定义的表达式的幸运行为?
我习惯于强类型语言,如C或SQL,它们更容易理解(对我来说)语义,并且还提供更全面的引用,因此对R的任何引用都有编程语言 - 理论重点或针对那些习惯强力打字的人也会很好。
答案 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.