【发布时间】:2015-12-15 10:04:32
【问题描述】:
我正在尝试为以下问题开发可重复使用的解决方案。
我将有各种数据框,我希望定义一些基本函数,然后将这些函数应用于数据框中的各个列。结果将是一个与原始数据框具有相同行数和列数的数据框。
我希望这个解决方案是可重复使用的,只要不同的功能组合可以应用于不同的数据帧。
用语言来解释这个有点棘手。我希望下面的代码能让上面的内容更加清晰。
# construct an example data frame
v_a <- c(1, 4, 8, 10, 12)
v_b <- c(4, 6, 7, 4, 3)
v_c <- c(10, 23, 45, 12, 45)
v_d <- c(12, 45, 7, 10, 5)
df <- data.frame(a = v_a, b = v_b, c = v_c, d = v_d)
# define some example functions
fn_1 <- function(x) x * 3
fn_2 <- function(x) x * 4
# assemble functions into a vector
vct_functions <- c(fn_1, fn_2, fn_1, fn_1)
# apply vector of functions to columns in a data.frame
new_df <- fn_apply_functionList(df, vct_functions)
我希望重用上述解决方案,以便将不同的功能组合应用于相同或不同的数据框。
再一次,下面是一个代码sn-p,以使这一点更清楚。
# create another vector of functions
vct_functionsB <- c(fn_3, fn_4, fn_1, fn_2)
# apply vector of functions to columns in a data.frame
new_df <- fn_apply_functionList(another_df, vct_functions)
任何关于优雅解决方案的想法都将不胜感激。
【问题讨论】:
-
如果您有 2 个以上相同长度的对象要循环,请使用
Map或mapply-df[] <- Map(function(d,f) f(d), df, vct_functions)例如。 -
谢谢。我认为 Map() 解决方案是将两组参数传递给一个函数。我想将 n 个函数的向量应用于 n 个列表。