使用函数和参数作为数据框构建结果向量
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_Value
和 Score
换句话说是这样的:
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
如果我有一个函数,请指教我应该使用哪个函数(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_Value
和 Score
换句话说是这样的:
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