通过逐行求值应用函数和参数

时间:2019-05-17 11:55:35

标签: r

我正在处理一个半自动化的报告,该报告由数十个不同的地块组成。我创建了一个excel / csv表来管理报表的内容,该报表按行列出要绘制的各种数据项,并在列中带有诸如标题等参数。我已经为每种绘图类型创建了自定义函数,它们可以正常工作。

让我停滞不前的是那种顶级功能,它将逐个遍历数据帧,获取函数ID,应用相应的函数,并将该行其他列中的值作为参数。

以下是一个简化的示例

dat <- data.frame(data_item=seq(1:5), function_id=c(1,2,3,2,3), 
                  x=sample(1:5,5), y=sample(1:5,5))

产生数据框:

data_item function_id x y
1         1           1 5 2
2         2           2 4 4
3         3           3 1 3
4         4           2 2 5
5         5           3 3 1

然后我有用于绘图的函数,说:

fun1 <- function(df, data_item, x,y){ggplot(df %>% dplyr::filter(data_item == !!data_item),aes(x,y))+geom_point(col = "red")}
fun2 <- function(df, data_item, x,y){ggplot(df %>% dplyr::filter(data_item == !!data_item),aes(x,y))+geom_point(col = "blue")}
fun3 <- function(df, data_item, x,y){ggplot(df %>% dplyr::filter(data_item == !!data_item),aes(x,y))+geom_point(col = "green")}

我需要按行评估dat数据帧,如果fun1等于1,则应用function_id,如果等于2,则应用fun2,依此类推,依次类推,{{1} }作为该函数的参数。

有什么想法吗?预先感谢!

更新: 我改编了Michael Scott的解决方案,几乎将其复制/粘贴,最后得到:

data_item, x, y

1 个答案:

答案 0 :(得分:3)

尝试一下:

funcs <- list(fun1,fun2,fun3)
apply(dat,1,function(row){
  data_item <- row[1]
  function_id <- row[2]
  x <- row[3]
  y <- row[4]
  funcs[[function_id]](dat,data_item,x,y)
})