我想通过%>%
将数据帧传递到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/