r:在自定义函数中嵌套for循环

时间:2018-11-23 13:04:45

标签: r function for-loop

我有一个匿名函数,可用来对它进行双指数转换,它对硬编码值非常有用:

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 :(得分:1)

如果只想使用最后一个求值语句的值,则R中的函数不需要显式的return语句。在您的简单功能(您的第一个代码块)中,该功能很好地工作。

在第二种情况下,如果我理解正确,则希望返回循环中一个接一个地计算的多个时间序列。也就是说,您将必须在函数中显式组成结果数据帧,然后返回该结果数据帧。

基于第二个代码块的示例

# 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