gpt4 book ai didi

r - 使用不纯函数遍历数据框行的最优雅方法是什么?

转载 作者:行者123 更新时间:2023-12-04 10:08:18 25 4
gpt4 key购买 nike

如果我有以下代码:

my_func <- function(var1, var2, var3, var4) {
... (side effect included)
}

df <- crossing(
nesting(var1=...,var2=....)
nesting(var3=...,var4=....)
)

在 df 的每一行上应用 my_func 的最优雅的方法是什么?
加上 my_func 不是一个纯函数,它被设计用来执行一些副作用(IO,plot ...)

方法一
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)

方法二
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

方法三
#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))

有没有更好的方法,可以使用 %>%好吧,要这样做吗?

最佳答案

老实说,我会使用 purr 的 pmap::pmap

library(tidyverse)

df = data.frame(
x = rnorm(10),
y = runif(10)
)
df %>%
pmap_dbl(function(x, y) {
min(x,y)
})

关于r - 使用不纯函数遍历数据框行的最优雅方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44813842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com