没有适用于'的方法;tbl#u vars';适用于“类”的对象;c(';fseq';,';函数';);使用R管时
在中,没有适用于'的方法;tbl#u vars';适用于“类”的对象;c(';fseq';,';函数';);使用R管时,r,dplyr,magrittr,R,Dplyr,Magrittr,在中, iris%>%左加入(iris%>%分组依据(物种)%>%总结(N=N())是答案的一部分 我将此脚本翻译为: iris%%>%{left_join(,.%>%group_by(Species)%%>%summary(N=N())},但出现错误: Error in UseMethod("tbl_vars") : no applicable method for 'tbl_vars' applied to an object of class "c('f
iris%>%左加入(iris%>%分组依据(物种)%>%总结(N=N())
是答案的一部分
我将此脚本翻译为:
iris%%>%{left_join(,.%>%group_by(Species)%%>%summary(N=N())}
,但出现错误:
Error in UseMethod("tbl_vars") :
no applicable method for 'tbl_vars' applied to an object of class "c('fseq', 'function')"
我认为两个脚本是相等的,是什么导致了错误?试试这只小猫:
iris %>% left_join(x = ., y = {.} %>% group_by(Species) %>% summarise(N=n()))
我们可以通过使用
add\u count
library(dplyr)
iris %>%
add_count(Species)
如果我们使用的是
%>%
,建议不要在流中插入{}
太麻烦,而是可以
iris %>%
group_by(Species) %>% # grouping done
summarise(N = n()) %>% # get summarised count
right_join(iris, .) # right or left join
这条链使它更容易理解。正如其他人所指出的,有一种方法可以通过将其包装在{}
中来实现这一点,但是,这也会破坏链接的整个目的。这可能是一个问题,因为它似乎将%>%…
序列评估为其他内容:
库(dplyr)
虹膜%>%
左联合({
打印(%>%
变异(新的=5L))
},
复制=真)
#>具有以下组件的功能顺序:
#>
#> 1. 变异(,新=5L)
#>
#>使用“函数”提取单个函数。
#>as.data.frame.default(y)中出错:无法将类“c”(“fseq”,“function”)”强制为data.frame
您可能希望向Github报告问题,或者我可以在Github上跟进问题-不确定这是更多还是更多。我以前用过类似的管子。正如@duck所指出的,它似乎将{.}
包裹在点周围,以逃避正在发生的任何事情
iris%>%
{
{.}%>%
组别(种类)%>%
汇总(N=N())
}
还有。。。不可避免的数据。表
备选方案:
库(data.table)
dt=原始数据表(iris)
dt[,N:=.N,by=物种]
dt
#>萼片。长萼片。宽花瓣。长花瓣。宽种N
#>1:5.1 3.5 1.4 0.2刚毛50
#>2:4.9 3.0 1.4 0.2刚毛50
#>3:4.7 3.2 1.3 0.2刚毛50
#>4:4.6 3.1 1.5 0.2刚毛50
#>5:5.0 3.6 1.4 0.2刚毛50
#> ---
#>146:6.7 3.0 5.2 2.3弗吉尼亚州50
#>147:6.3 2.5 5.0 1.9弗吉尼亚州50
#>148:6.53.05.22.0弗吉尼亚州50
#>149:6.2 3.4 5.4 2.3弗吉尼亚州50
#>150:5.9 3.0 5.1 1.8弗吉尼亚州50
如果要创建一个新列,您可以执行iris%>%添加计数(物种)
谢谢。我不熟悉github,请让Hadley知道这一点。请看这里:问题现已解决。我猜这是通过设计来使用管道创建函数的。