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