我的教授分配了一个关于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