我有一个匿名函数,可用来对它进行双指数转换,它对硬编码值非常有用:
custom_func <- function(x) {
0.01^(0.95^(x/max(x)*100))
}
df$newVar<- custom_func(df$var)
df$newVar
但是,我想使用创建一个版本来提取第二个指数的多个参数,并将它们作为永久矢量添加到我的数据框中。我的尝试并未向数据框添加任何内容,并且无法理解如何解决此问题:
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
答案 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