R将不同的函数应用于不同的数据框列

时间:2015-12-14 23:20:06

标签: r function dataframe

我正在尝试为以下问题开发可重用的解决方案。

我将拥有各种数据框,我希望定义一些基本功能,然后将这些功能应用于数据框中的各个列。结果将是与原始数据帧具有相同行数和列数的数据帧。

我希望这个解决方案可以重复使用,因为不同的功能组合可以应用于不同的数据帧。

用语言解释这一点有点棘手。我希望下面的代码能使上述内容更加清晰。

# 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)

我希望重用上面的解决方案,以便可以将不同的功能组合应用于相同或不同的数据框。

同样,以下是一个代码片段,以使其更清晰。

# 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 个答案:

答案 0 :(得分:3)

@geotheory几乎就在那里,vct_functionsB被强制转移到list

试试这个,

do.call(cbind, lapply(1:ncol(df), function(c) vct_functions[[c]](df[, c])))

答案 1 :(得分:0)

也许这个......?

self.paint(self.screen)

然后取消列出/解析结果..