R对不同的数据帧列应用不同的函数

R对不同的数据帧列应用不同的函数,r,function,dataframe,R,Function,Dataframe,我正在尝试为以下问题开发一个可重用的解决方案 我将有各种数据帧,我希望定义一些基本函数,然后将这些函数应用于数据帧中的各个列。结果将是一个与原始数据帧具有相同行数和列数的数据帧 我希望这个解决方案是可重用的,因为不同的函数组合可以应用于不同的数据帧 用语言来解释这一点有点棘手。我希望下面的代码能让上面的内容更清楚一点 # construct an example data frame v_a <- c(1, 4, 8, 10, 12) v_b <- c(4, 6, 7, 4, 3)

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

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

我希望这个解决方案是可重用的,因为不同的函数组合可以应用于不同的数据帧

用语言来解释这一点有点棘手。我希望下面的代码能让上面的内容更清楚一点

# 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)
#构造一个示例数据帧
也许是这个

lapply(1:ncol(df), FUN=function(i){vct_functionsB[i](df[,i])})

然后取消列出/分析结果。

@geotheory几乎就在那里,
vct\U函数b
被强制为
列表

试试这个

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

如果有2个以上长度相同的对象要循环,请使用
Map
mapply
-
df[]谢谢。我认为Map()解决方案是将两组参数传递给一个函数。我想将n个函数的向量应用于n个列表。谢谢你的解决方案。我原以为它会起作用,但当我尝试它时……我收到了以下消息:“在乐趣中出错(X[[I]],…):尝试应用非功能”mmmm??很确定这是因为
vct\u functionsB[I]
应该是
vct\u functionsB[[I]
。检查
list(function(x)x)[1](5)
list(function(x)x)[[1]](5)
单括号[]返回列表,而双括号返回单个元素。
do.call(cbind, lapply(1:ncol(df), function(c) vct_functions[[c]](df[, c])))