如果我有以下代码片段:
什么是将my_func应用于df的每一行的最优雅方法? 此外,my_func不是一个纯函数,它设计用于执行一些副作用(IO、绘图等)。
方法1
方法2
my_func <- function(var1, var2, var3, var4) {
... (side effect included)
}
df <- crossing(
nesting(var1=...,var2=....)
nesting(var3=...,var4=....)
)
什么是将my_func应用于df的每一行的最优雅方法? 此外,my_func不是一个纯函数,它设计用于执行一些副作用(IO、绘图等)。
方法1
my_func_wrapper <- function(row) {
my_func(row['var1'], row['var2'], row['var3'], row['var4'])
}
# Vector coercion is a problem, if variables are not the same type.
apply(df, 1, my_func_wrapper)
方法2
df %>%
rowwise() %>%
do(result=invoke(my_func, .)) %>% #If it ends here, I will be pretty happy.
.$result # Relying auto print feature to plot or trigger some side effect
方法 3
#This looks pretty good on its own but it does not play well with the pipe %>%
foreach(row=iter(df, by='row')) %do% invoke(my_func, row)
#Method 3.1 (With Pipe)
df %>%
(function(df) foreach(row=iter(df, by='row')) %do% invoke(my_func, row))
#Method 3.2 this does not work
# df %>%
# foreach(row=iter(., by='row')) %do% invoke(my_func, row)
#Method 3.3 this does not work
#I am trying to get this work with purrr's simplified anonymous function, but it does not work.
# df %>%
# as_function(~ foreach(row=iter(., by='row')) %do% invoke(my_func, row))
有没有更好的方法,可以很好地使用%>%
,来做这件事?
dplyr
?也许是foreach
?),以增加它被回答的机会。 - J.Con