【问题标题】:"could not find function %>%<-", issue with tidyr package and the %>% operator“找不到函数 %>%<-”,tidyr 包和 %>% 运算符有问题
【发布时间】:2023-12-30 08:32:02
【问题描述】:

我正在编写有关使用 tidyr 包的漩涡课程的脚本,但我在使用 %&gt;% 运算符时遇到了一些问题。我有一个名为 pass 的数据框,其中包含 4 名学生的姓名、班级编号和最终成绩。我想添加一个名为 status 的新列,并用一个表示“通过”的字符向量填充它。在此之前,我使用 select 从名为 students4 的数据框中获取一些列,并将其存储在名为成绩簿的数据框中

gradebook <- students4 %>%
select(id, class, midterm, final) %>%
passed<-passed %>% mutate(status="passed")

漩涡问题相互叠加,最后一个问题只是让我运行第一行代码,所以我认为这两个问题是正确的。第三行是在几次错误尝试后提出的建议,所以我认为 %>% 有一些我不理解的地方。当我运行代码时,我收到一条错误消息;

Error in students4 %>% select(id, class, midterm, final) %>% passed <- passed %>%  : 
  could not find function "%>%<-

我发现另一位用户询问“找不到函数 "%&gt;%",他能够通过安装 magrittr 软件包解决问题,但这对我来说没有用。关于我的问题的任何输入代码将非常感谢!

【问题讨论】:

  • 您的语法无效...不清楚您要在管道中间使用&lt;- 做什么。也许你不小心把悬空的管道留在了 2 号线?
  • 老实说,我对课程要我做什么有点困惑。在我看来,第一 2 行将一些来自学生 4 的列分配给成绩簿,而最后一行只是将一个新列添加到一个名为 pass 的单独数据框中。我不清楚第二行输出如何与第三行相关,似乎函数式编程不是这样做的方法。如果有帮助,这里是我的数据框gradebookstudents4passed 的一些图片,如果有帮助的话。
  • 你说你想做一件事,然后做另一件事,对吧?第一个完成后(制作成绩册),你不应该有一个尾随管道。为了使代码更易于阅读,您也可以考虑在其后放置一个空行。如果你想讨论管道如何适应函数式编程或类似的东西,你可以试试community.rstudio.com

标签: r functional-programming tidyr


【解决方案1】:

这不是包裹或运营商的问题。您正在尝试使用新变量管道进入新行。

%&gt;%将前一个数据帧作为函数 df 参数传递给下一个函数。

而不是做所有这些:

Gradebook <- select(students4, id, class, midterm, final)
Gradebook2 <- mutate(Gradebook, test4 = 100) 
Gradebook3 <- arrange(Gradebook2, desc(final))

如果您正在处理相同的数据帧,则可以将运算符通过管道传递到下一个参数中。

Gradebook <- students4 %>% 
      select(students4, id, class, midterm, final) %>%
      mutate(test4 = 100) %>%
      arrange(desc(final))

更简洁,更易于阅读。

在你的第二行中,你试图将它传递给一个新函数,但是你突然定义了一个变量,而不是一个函数。我不知道你正在做的练习,但你应该删除第二个运算符。

gradebook <- students4 %>%
select(id, class, midterm, final)

passed <- passed %>% mutate(status="passed")

【讨论】: