为什么可以';萨普利的t-qnorm?
但是下面的代码不能运行,为什么为什么可以';萨普利的t-qnorm?,r,R,但是下面的代码不能运行,为什么-qnorm不能在sapply中运行 sapply(c(0.05,0.01),-qnorm) -qnorm中出错:一元运算符的参数无效 Compose适用于以下情况: > sapply(c(0.05,0.01),function(k){-qnorm(k)}) [1] 1.644854 2.326348 > -sapply(c(0.05,0.01),qnorm) [1] 1.644854 2.326348 请注意,此处需要使用-的反引号。问题的原因与-q
-qnorm
不能在sapply中运行
sapply(c(0.05,0.01),-qnorm)-qnorm中出错:一元运算符的参数无效
Compose
适用于以下情况:
> sapply(c(0.05,0.01),function(k){-qnorm(k)})
[1] 1.644854 2.326348
> -sapply(c(0.05,0.01),qnorm)
[1] 1.644854 2.326348
请注意,此处需要使用
-
的反引号。问题的原因与-qnorm(.)
实际上是两个函数的组合有关。首先计算qnorm(.)
,然后取负值
sapply
需要一个单一功能
使用时,sapply(,-qnorm)
R
试图计算“减去函数qnorm”,这对函数没有意义。
(只需键入-qnorm
,您将得到相同的错误。)
之所以-qnorm(k)
有效,是因为R
正在计算qnorm(k)
得到一个数字,然后取该数字的负数
类似地,sapply(,qnorm)
给出了一个向量。这就是为什么当你在它前面加上负号时,你会得到你想要的输出 因为-qnorm
不是函数或函数名。-
在此上下文中是一元前缀函数,qnorm
是函数,但该上下文中的-qnorm
不会导致解释器解析为函数(x){-(qnorm(x))}
这会成功的。萨普利调用match.function
,传递“-qnorm”作为搜索参数,正如马吕斯所说的-qnorm
不是一个函数名,所以它找不到它。他几乎把这个精确的代码作为问题的第二个命令。。。当然,这个解释是正确的。我想这已经包含在问题的评论中了……但我完全忽略了这一点。哎呀!(答案经过编辑以反映)我不熟悉功能性
,撰写似乎非常实用。然而,在这种情况下,似乎有点矫枉过正;)这似乎有些过分,但(至少对我来说)它会产生一个更可读的表达式。感谢您指出这一点。另外,请查看Reduce
,它是撰写
的基础。同样有用,但适用于不同的问题。
require(functional)
sapply(c(0.05,0.01), Compose(qnorm, `-`))
[1] 1.644854 2.326348