【发布时间】:2023-03-06 04:48:01
【问题描述】:
我不确定我对 match.fun 的使用是否正确或不适用于这种情况。 (我不想使用 for 循环,因为它需要时间)。
我有一个这样的数据框。
df <- data.frame(client = c("A", "B", "C", "D"),
fun = c("bill1stEvent_OT", "bill1stEvent_Tour", "billCreation_OT", "bill1stEvent_Tour_LoadingSite"),
agency = c("NA", "NA", "Agency_A", "NA"),
loading_site = c("NA", "NA", "NA", "Paris"))
>df
client fun agency loading_site
A bill1stEvent_OT NA NA
B bill1stEvent_Tour NA NA
C billCreation_OT Agency_A NA
D bill1stEvent_Tour_LoadingSite NA Paris
fun 列包含我创建的函数。每个函数都采用相同的参数:client、agency、loading_site、year 和 month。因此,您阅读此表的方式是,例如,对于客户端C,应用带有参数agency = Agency_A 和loading_site = NULL 的函数billCreation_OT。每个函数都返回一个数据框。
我有一个我想应用函数的客户列表,我还设置了参数year 和month。 :
client_list <- c("A", "C")
year <- "2018"
month <- "07"
问题:我怎样才能调用这个表并应用具有相应参数的函数?所以对于上面的client_list,我想做的是在下面运行这两个函数并将结果(数据帧)存储在一个列表中(或任何可能的)。
bill1stEvent_OT(client = "A", agency = NULL, loading_site = NULL)
billCreation_OT(client = "C", agency = Agency_A, loading_site = NULL)
我的尝试:
fun_to_apply <- df[df$client %in% client_list, ]$fun
agency_arg <- df[df$client %in% client_list, ]$agency
loading_site_arg <- df[df$client %in% client_list, ]$loading_site
sapply(X = lapply(fun_to_apply, match.fun),
FUN = mapply,
year = year,
month = month,
agency = agency_arg,
loading_site = loading_site_arg)
Error in (function (client, year, month) :
arguments inutilisés (agency = dots[[3]][[1]], loading_site = dots[[4]][[1]])
我也不知道如何将agency 和loading_site 作为NULL 传递给函数参数。当您读取数据框时,它会将 NA 评估为字符串,例如 "NA" 我猜。
感谢您的帮助!
【问题讨论】:
-
可以的。但是还有更简单的方法。为什么函数的名称存储在数据框中?为什么没有 1 个函数和 4 个基于输入的可能操作,那么我们可以只做
apply(df, 1, myFun)。 -
我不确定你的意思。但这只是我做的20多个函数的提取,如果合并成一个函数就太复杂了。
标签: r lapply matching sapply mapply