R 使用“在TIBLE上进行子集设置”;[……”是;给予;“未找到对象”;错误

R 使用“在TIBLE上进行子集设置”;[……”是;给予;“未找到对象”;错误,r,dplyr,R,Dplyr,dplyr上的文章说“[]”(方括号)可以用来对过滤过的TIBLE进行子集划分,如下所示: filter(mammals, adult_body_mass_g > 1e7)[ , 3] 但我得到一个“未找到对象”错误。 下面是在更知名的数据集“iris”上复制的错误 筛选器中出错(.data,.dots=lazyeval::lazy_dots(…): 未找到对象“萼片长度” 我还想提到的是,我故意不喜欢在dplyr中使用select(),因为我需要向量输出,而不是单个列上的数据帧。不幸的

dplyr上的文章说“[]”(方括号)可以用来对过滤过的TIBLE进行子集划分,如下所示:

filter(mammals, adult_body_mass_g > 1e7)[ , 3]
但我得到一个“未找到对象”错误。 下面是在更知名的数据集“iris”上复制的错误

筛选器中出错(.data,.dots=lazyeval::lazy_dots(…): 未找到对象“萼片长度”


我还想提到的是,我故意不喜欢在dplyr中使用
select()
,因为我需要向量输出,而不是单个列上的数据帧。不幸的是,dplyr总是强制数据帧输出(出于充分的理由)。

您需要一个额外的管道:

iris %>% filter(Sepal.Length>6) %>% .[,1:3]
对不起,括号前面忘记了

注意:如果您坚持使用tidyverse语法,并将select用作最后一个操作,那么代码的可读性可能会更高

iris %>%
     filter(Sepal.Length > 6) %>%
     select(1:3)

dplyr
-本机方法是使用
select

iris %>% filter(Sepal.Length > 6) %>% select(1:3)
您还可以使用
{}
,以便在应用
[
之前完成过滤:

{iris %>% filter(Sepal.Length>6)}[,c(1:3)]
或者,如另一个答案中所建议的,使用
符号来指示与
[
相关的数据应该放在哪里:

iris %>% filter(Sepal.Length>6) %>% .[,1:3]
library(magrittr)
iris %>% filter(Sepal.Length>6) %>% extract( ,1:3)
您还可以显式加载
magrittr
,并使用
extract
,这是
[
的“可管道”版本:

iris %>% filter(Sepal.Length>6) %>% .[,1:3]
library(magrittr)
iris %>% filter(Sepal.Length>6) %>% extract( ,1:3)


您引用的博客条目在
dplyr
时代已经有三年了。
dplyr
已经发生了很大的变化。我不知道博客的建议在撰写时是否有效,但我建议您寻找更多的最新来源来了解这个频繁变化的包。

Sepal.Length
a column在您的
哺乳动物
数据帧中?似乎您发布了一条与代码不符的错误消息。抱歉,错误消息不是来自哺乳动物,而是来自iris数据集。如果您愿意,我可以将错误的完整复制粘贴到iris。我认为这是不言自明的。添加了与错误对应的代码。
过滤器(iris,Sepal.Length>6)[,c(1:3)]
仍然有效。@Lamia:没错!因此管道操作是使用子集的不同语法。无论如何,我从akaDrHouse.Nopes获得了解决方案。现在获取此错误。错误:iris%>%filter(Sepal.Length>6)%>%[“iris%>%filter”中意外出现“[”@sanjmeh有一个输入错误。将
添加到括号之前。Super duper!现在可以工作了。谢谢。在您的评论@akaDrHouse中,我更希望
选择
但问题是dplyr在只选择一列时不会降低级别。我只希望一列作为向量输出。因此我将使用
iris%>%过滤器(Sepal.Length>6)%>%.[3]
dplyr的本机使用是正确的。但正如我在前面的评论中提到的,我之所以不想使用
select
,是因为当我只选择一列时,我想要一个向量而不是一个数据帧。dplyr不允许这样做。在问题中包含这样的信息是很好的。并且使用一个与您的使用相匹配的示例它可以使问题对未来的用户更有用,并且答案更相关。添加了不使用本机子集的原因。