所以我在r:
中创建了这个函数v=1:4
h = function(x){sum(exp(x*v))}
为什么这不起作用?什么能使它以简单的形式发挥作用?
x v应为(x,2x,3x,4x),exp(x v)应为(exp(x),..,exp(4x)),这应该有效。
编辑:
很抱歉,如果我原来的问题看起来无效,因为此功能不会生成任何错误消息。但是,情节(h)有问题,这不应该是。与其他命令的许多高级交互都会以某种方式出现问题。
答案 0 :(得分:1)
你应该只是对函数进行矢量化。
链接:https://stat.ethz.ch/R-manual/R-devel/library/base/html/Vectorize.html
更新:好的,一些代码
R 中没有数字,只有向量。数字是长度为1的原子矢量。因此,每个函数都应该期望将向量作为输入并生成向量作为输出。所有标准功能和操作都是矢量化的。
接受你的功能并将一些print
放入
h <- function(x){
print(x)
print(x*v)
print(exp(x*v))
sum(exp(x*v))
}
可以看到,调用h(0.5)
将生成单个值x
,向量为4
对于v*x
的乘积,指数为4的向量,然后作为和的结果返回单个值。在我的电脑上
[1] 0.5
[1] 0.5 1.0 1.5 2.0
[1] 1.648721 2.718282 4.481689 7.389056
[1] 16.23775
h(c(0.5))
之类的通话会产生绝对相同的结果。好的,到目前为止一切顺利。但!如果你用h(c(0.5, 1.0))
之类的向量来调用它,你将得到单个值,这是错误的。
那么,如何修复它 - Vectorize!
hh <- Vectorize(h)
hh(c(0.5, 1.0))
调用hh(c(0.5, 1.0))
将产生正确的结果,即vector,带输出
[1] 0.5
[1] 0.5 1.0 1.5 2.0
[1] 1.648721 2.718282 4.481689 7.389056
[1] 1
[1] 1 2 3 4
[1] 2.718282 7.389056 20.085537 54.598150
[1] 16.23775 84.79102