在r中创建向量元素之和的函数

时间:2016-01-24 01:48:42

标签: r matrix vector

所以我在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)有问题,这不应该是。与其他命令的许多高级交互都会以某种方式出现问题。

1 个答案:

答案 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