r - Magritttr + lapply,其中第一个参数不是 LHS

标签 r dplyr lapply magrittr

我想通过%>%将数据帧传递到lapply中,但我需要能够访问列的名称,因此我的 lapply 参数如下所示:

mydf %>%
   lapply( 1:length(.), function(x) {
        manipulate_df( mydf[x], using_column_names(names(mydf)[x] )
   })

但是,当我尝试这样做时,出现以下错误:

Error in match.fun(FUN) :
   '1:length(.)' is not a function, character or symbol

据我所知,R 和 lapply 不喜欢 1:length(.) 。我认为一个有效的选择是打破链条,但我想学习如何正确地做到这一点。

最佳答案

这里的问题是 %>% 将 mydf 作为第一个参数插入(以便将三个参数传递给 lapply。尝试将整个 lapply 表达式括在括号中。这会阻止插入行为:

mydf %>%
   { lapply( 1:length(.), function(x) {
        manipulate_df( mydf[x], using_column_names(names(mydf)[x] )
   }) }

我认为最漂亮的解决方法是创建一个新函数:

manipulate_whole_df = function(mydf)
  lapply( 1:length(mydf), function(x)
            manipulate_df( mydf[x], using_column_names(names(mydf)[x] ) ) )

mydf %>%
  manipulate_whole_df

甚至

library(tidyr)

mydf %>%
  gather(variable, value) %>%
  group_by(variable) %>%
  do(manipulate_df(.$value, 
                   .$variable %>% first %>% using_column_name ) )

关于r - Magritttr + lapply,其中第一个参数不是 LHS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37684986/

相关文章:

r - 如何在filter_at中使用.data?

r - 使用tryCatch在出错时跳过执行而不退出lapply()

r - 为什么 rapply 和 lapply 处理 NULL 的方式不同?

r - 在 stat_smooth 之上更改图例中 geom_point 的 alpha 级别

r - 我可以编辑某种类型的 R Studio 配置文件而不是通过 GUI 更改所有选项吗?

r - 将列添加到数据框以显示最新的描述

r - 在运行时在 lapply 包装器中打印消息

r - R套件手册中的排除功能

r - 如何估计 R 的变异来源? (对于双向方差分析)

r - 使用 dplyr 中的列名向量在列中查找行最大值