如何制作一个函数来对 R 中向量的指数求和?



我的教授分配了一个关于R编程的问题,我被卡住了。他希望我们做一个函数,取向量中所有数字的指数(e^(x[i](,然后求和。方程式是:

e^x(i(,n和i=1的总和。

我做了一个函数,它会给我向量中第一个值的指数。但我想得到所有值的指数,并求和。这是我的代码

#Vector for summing
x=c(2,1,3,0.4)
#Code for function
mysum = 0
myfun=function(x){
for (i in 1:length(x)){
mysum = mysum + exp(x[i])
return(mysum)
}
}
myfun(x)
#returns 7.389056

我也尝试过使用I=1:1,因为等式指定I=1,尽管我知道它只通过1个数字,但它给了我相同的答案。。。。明显地

myfun=function(x){
for (i in 1:1)

有人对总结有什么建议吗?

  • 您需要将mysum的初始值设置为之后的累加值,并将线return(mysum)移动到for循环之外以返回结果,即
myfun=function(x){
mysum <- 0
for (i in 1:length(x)){
mysum = mysum + exp(x[i])
}
return(mysum)
}

或者只是

myfun=function(x){
mysum <- 0
for (i in x){
mysum = mysum + exp(x)
}
return(mysum)
}
  • 由于exp运算是向量化的,您也可以定义函数myfun,如下所示
myfun <- function(x) sum(exp(x))

您还可以使用大多数基本函数已经矢量化的事实:

1( 创建一个伪矢量

1:10
#>  [1]  1  2  3  4  5  6  7  8  9 10

2( 将你的函数应用于该向量,你会得到向量化的结果

exp(1:10)
#>  [1]     2.718282     7.389056    20.085537    54.598150   148.413159
#>  [6]   403.428793  1096.633158  2980.957987  8103.083928 22026.465795

3( 求和矢量

sum(exp(1:10))
#> [1] 34843.77

4( 编写函数以获得(一点(时间

my_fun <- function(x){sum(exp(x))}
my_fun(1:10)
#> [1] 34843.77

最新更新