使用函数和参数作为数据框构建结果向量

Build a vector of results using a function and argument as data frame

如果我有一个函数,请指教我应该使用哪个函数(map/lapply/sapply ..):

foo <- function(x, argument1 = "abc", default_score = def_score_dataframe)
returning score

其中 x 将是一个数据框,每次我 运行 函数时参数 1 都会更改,default_score 是一个 data.frame 具有: name, default_score, 每行.

我想要的是使用像 map/lapply 这样的单行函数,它将一个值向量分配给 argument1 和 return 一个包含列的数据框argument1_ValueScore

换句话说是这样的:

res_df <- lapply(argument_values,
                 foo(x, argument1 = argument_values, default_score = def_score_dataframe))

那应该给我一个结果:

res_df
# argument1_Value Score
#           "aaa"     5

我会用一个例子来回答你的问题。

您有一个对数据框 x、向量 (vectorArgument) 和另一个参数(exponent,默认值为 2)进行操作的函数

myFun = function(x, vectorArgument, exponent = 2){
  z = (colSums(x) - vectorArgument) ^ exponent
}

如果你将这个函数应用到

df = data.frame(A = 1:4, B = 5:8)
d = myFun(df, c(1,22),3)

# You would get:
> d
A   B 
729  64

现在你在另一个数据框中有一组 vectorArguments:

argumentsDF = data.frame(arg1 = c(1,22), arg2 = c(3,3), arg3 = c(17,21))

为了在 df 上计算上述函数并针对每一列 (margin = 2) 作为 vectorArgument 参数,执行:

result = apply(X = argumentsDF, 
           MARGIN = 2, 
           FUN = function(y){
             myFun(x = df,
                   vectorArgument = y,
                   exponent = 3)
             }
           )

您将获得:

> result
  arg1  arg2 arg3
A  729   343 -343
B   64 12167  125