gpt4 book ai didi

r - 使用 R 中的 apply 系列将 2 列数据框的每一行传递给我创建的函数?

转载 作者:行者123 更新时间:2023-12-04 02:37:19 25 4
gpt4 key购买 nike

我有一个包含两列的小数据框:fp(误报)和 fn(误报),如下所示:

falsepos <- c(.05, .25, .5)
falseneg <- c(.01, .05, .1)
x_name <- "fp"
y_name <- "fn"

df <- data.frame(falsepos,falseneg)
names(df) <- c(x_name, y_name)

我还编写了一些贝叶斯法则的改编版作为函数,如下所示:

bayesrule <- function(baserate = .03, 
fp,
fn) {
output <- (baserate * (1 - fn)) / ((baserate * (1 - fn)) + ((1 - baserate) * (fp)))

return(output)
}

fpfn 代表它们在 df 中所做的相同事情。在此函数 bayesrule 中,我为 .03baserate 保留了默认值。我的问题是:我如何编写一些 R 代码 - 可能使用 apply 函数系列,我猜,但也许是其他东西 - 将每一行传递给dffpfn 的值放入它们在 bayesrule 函数中的相应位置,产生三个贝叶斯规则计算(每个具有相同的默认 baserate .03)?

我看过 SX 中的类似帖子并且已经非常接近了,但我只是害羞地在这方面做了标记。我已经接近这个了:

sapply(df,FUN = bayesrule,fn=df$fn, fp=df$fp)

但没有更近。

最佳答案

一般情况下,如果函数不是向量化的,依赖多个长度>1的参数,我们可以使用Map/mapply

unlist(Map(bayesrule, fn = df$fn, fp = df$fp))

或者向量化函数并应用列

Vectorize(bayesrule)(fn = df$fn, fp = df$fp)
#[1] 0.37979540 0.10516605 0.05273438

这里,函数已经被向量化了,因为函数中显示的操作是 R 中的向量化操作(评论中也提到了 -@r2evans 评论)。所以,它可以直接应用

with(df, bayesrule(fp=fp, fn = fn))
#[1] 0.37979540 0.10516605 0.05273438

或者用dplyr

library(dplyr)
df %>%
mutate(new = bayesrule(fp = fp, fn = fn))

使用sapply,它会分别遍历每一列

关于r - 使用 R 中的 apply 系列将 2 列数据框的每一行传递给我创建的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61132384/

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