gpt4 book ai didi

r - 如何使用 dplyr 和 magrittr 将数据操作传递到需要数值向量的函数中?

转载 作者:行者123 更新时间:2023-12-04 12:28:16 24 4
gpt4 key购买 nike

我正在尝试使用 dplyr 和 magrittr 将数据操作通过管道传输到需要数值向量作为输入的函数中。具体来说,我希望我的管道结果进入 ecdf() 函数(它从向量生成经验累积分布函数)。

这是我想做的工作:

x = rnorm(100)
t = sample(c("A","B"), replace = TRUE)
df = data.frame(x,t)
df_ecdf = filter(df, x > 0) %>%
filter(t == "A") %>%
select(x) %>%
as.vector() %>%
ecdf()

但是,这不起作用,因为 ecdf() 给出了错误:

Error in `[.data.frame`(x, order(x, na.last = na.last, decreasing = decreasing)) : 
undefined columns selected

这是有道理的,因为通过 as.vector() 的管道实际上不会产生数据向量。它会生成一个列表,我不知道如何使用管道将其转换为数字向量。

任何帮助将不胜感激。

编辑

正如下面 BrodieG 的回答,解决方案是在 ecdf 之前通过管道进入 unlist,并且也不需要括号(根据 Ananda Mahto):

df_ecdf = filter(df, x > 0) %>%
filter(t == "A") %>%
select(x) %>%
unlist %>%
ecdf

最佳答案

使用unlist

filter(df, x > 0) %>%
filter(t == "A") %>%
select(x) %>%
unlist %>%
ecdf

或者:

filter(df, x > 0) %>%
filter(t == "A") %>%
`[[`("x") %>%
ecdf

但是,您应该考虑将 base R 用于此类任务:

ecdf(subset(df, x > 0 & t == "A", x, drop=T))

或者即使你必须:

df %>% subset(x > 0 & t == "A", x, drop=T) %>% ecdf

关于r - 如何使用 dplyr 和 magrittr 将数据操作传递到需要数值向量的函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29372914/

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