Как сделать функцию, которая суммирует экспоненты вектора в R? - PullRequest
1 голос
/ 24 февраля 2020

Мой профессор задал вопрос по программированию на 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, хотя я знал, что это будет только go через 1 число, и это дало мне тот же ответ .... очевидно.

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

Кто-нибудь есть какие-либо предложения, чтобы получить его на сумму?

Ответы [ 2 ]

3 голосов
/ 24 февраля 2020
  • Вам необходимо установить начальное значение mysum для накопления впоследствии, а также переместить строку return(mysum) за пределы for l oop, чтобы вернуть результат, т. Е.
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 голос
/ 24 февраля 2020

Вы также можете использовать тот факт, что большинство базовых функций уже векторизованы:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...