r: вложение цикла for в пользовательскую функцию - PullRequest
0 голосов
/ 23 ноября 2018

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

custom_func <- function(x) {
  0.01^(0.95^(x/max(x)*100))
}

df$newVar<- custom_func(df$var)

df$newVar

Возвращает ожидаемую преобразованную переменную: It returns the expected transformed variable

Однако я хочу использовать создание версии, которая будет принимать несколько параметров для второго показателя и добавлять их как постоянные векторы в мой фрейм данных.Моя попытка ничего не добавляет к информационному фрейму, и мне трудно понять, как это исправить:

alpha<- seq(0.85, 0.95, by= .01)

dblExponential<- function(a,x){
  for (i in alpha) {
    0.01^(a^(x/max(x)*100))
  }
}

dblExponential(alpha,df$var)

df

1 Ответ

0 голосов
/ 23 ноября 2018

Функции в R не нуждаются в явном операторе возврата, если вы хотите использовать только значение последнего оцененного оператора.Это прекрасно работает в вашей простой функции (вашем первом блоке кода).

Во втором случае, если я правильно понимаю, вы хотите возвращать несколько временных рядов, которые вычисляются один за другим в цикле.То есть вам придется явно составить фрейм данных результата в функции, а затем вернуть этот фрейм данных результата.

Пример, основанный на вашем втором кодовом блоке

# Function definition (Note that the common convention is to define functions at the
#        top of any script so that people can understand the structure more easily.)
#
dblExponential<- function(a, x){
  # Prepare result data frame
  result_df <- data.frame(x)
  # loop through the sequence
  for (i in a) {
    # Compute column for value i
    result_column <- 0.01^(i^(x/max(x)*100))
    # Define name of column in the resulting data frame
    result_column_name <- as.character(i)
    # Add the column to the data frame
    result_df[result_column_name] <- result_column
  }
  # Return the result data frame
  return(result_df)
}

# Create example data frame
df <- data.frame(c(1, 2, 3, 4, 5, 6, 7))
colnames(df) <- c("var")

# Your sequence of exponents
alpha<- seq(0.85, 0.95, by= .01)

# Call to the function, assign the return value to df2
df2 <- dblExponential(alpha,df$var)

# print df2
df2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...