为什么';nrow()';函数不';似乎在';总结()';功能?

为什么';nrow()';函数不';似乎在';总结()';功能?,r,R,请参阅以下代码: library(dslabs) data(gapminder) gapminder %>% filter(year %in% c(2010, 2015) & !is.na(population)) %>% group_by(year) %>% summarise(weight = nrow(population)) 为什么它会给我一个错误:“Columnweight的类型不支持NULL” nrow()接受一个向量作为参数,这里popul

请参阅以下代码:

library(dslabs)
data(gapminder)
gapminder %>%
  filter(year %in% c(2010, 2015) & !is.na(population)) %>%
  group_by(year) %>%
  summarise(weight = nrow(population))

为什么它会给我一个错误:“Column
weight
的类型不支持NULL”

nrow()
接受一个向量作为参数,这里
population
是一个向量
summary()
函数。所以,我想知道为什么它不起作用


注意:我知道这里的
nrow()
的替代方案,我不想寻找可行的替代代码。我的问题是概念性的,特别涉及“为什么”。

因为您正在将
nrow
传递给一个
NULL
的列名。例如,见:

nrow(mtcars$mpg)
#NULL
nrow
接受数据帧而不是向量:

nrow(mtcars)
#[1] 32
但是,还有一个接受向量的
NROW
函数,因此您可以在此处使用该函数:

library(dplyr)

gapminder %>%
  filter(year %in% c(2010, 2015) & !is.na(population)) %>%
  group_by(year) %>%
  summarise(weight = NROW(population))

但是,如果您使用的是
dplyr
,并且想要计算每个组中的行数,则在
dplyr
生态系统中有一些专门的功能,例如:

gapminder %>%
  filter(year %in% c(2010, 2015) & !is.na(population)) %>%
  group_by(year) %>%
  summarise(weight =n())

# A tibble: 2 x 2
#   year weight
#  <int>  <int>
#1  2010    185
#2  2015    185

因为您正在将
nrow
传递给一个
NULL
的列名。例如,见:

nrow(mtcars$mpg)
#NULL
nrow
接受数据帧而不是向量:

nrow(mtcars)
#[1] 32
但是,还有一个接受向量的
NROW
函数,因此您可以在此处使用该函数:

library(dplyr)

gapminder %>%
  filter(year %in% c(2010, 2015) & !is.na(population)) %>%
  group_by(year) %>%
  summarise(weight = NROW(population))

但是,如果您使用的是
dplyr
,并且想要计算每个组中的行数,则在
dplyr
生态系统中有一些专门的功能,例如:

gapminder %>%
  filter(year %in% c(2010, 2015) & !is.na(population)) %>%
  group_by(year) %>%
  summarise(weight =n())

# A tibble: 2 x 2
#   year weight
#  <int>  <int>
#1  2010    185
#2  2015    185

summary
要求其摘要函数的结果具有长度为1的结果和有效的列类型

> x = 1:3
> nrow(x)
NULL
> length(nrow(x))
[1] 0
> class(nrow(x))
[1] "NULL"
> typeof(nrow(x))
[1] "NULL"

应用于向量的
nrow
返回
NULL
,其长度为0,
class
NULL
,并且
类型为
NULL
,这是无效的列类型

> x = 1:3
> nrow(x)
NULL
> length(nrow(x))
[1] 0
> class(nrow(x))
[1] "NULL"
> typeof(nrow(x))
[1] "NULL"

summary
要求其摘要函数的结果具有长度为1的结果和有效的列类型

> x = 1:3
> nrow(x)
NULL
> length(nrow(x))
[1] 0
> class(nrow(x))
[1] "NULL"
> typeof(nrow(x))
[1] "NULL"

应用于向量的
nrow
返回
NULL
,其长度为0,
class
NULL
,并且
类型为
NULL
,这是无效的列类型

> x = 1:3
> nrow(x)
NULL
> length(nrow(x))
[1] 0
> class(nrow(x))
[1] "NULL"
> typeof(nrow(x))
[1] "NULL"

nrow
是否返回一个等于行数的整数?
nrow
应用于数据帧或矩阵时,返回一个等于行数的整数<代码>nrow
,应用于向量,则不会。(从技术上讲,向量没有行,它们只有一个长度。)因为您在问题中指定了向量,并说您对备选方案不感兴趣,所以我在问题中避免了这一点。也许你在想
NROW
,它对向量更友好?好的,我知道了。哎呀!巨掌!从文档中,完全不清楚nrow()是否仅适用于数据帧。nrow是否返回一个整数,该整数等于行数?
nrow
,应用于数据帧或矩阵,返回一个整数,即行数<代码>nrow
,应用于向量,则不会。(从技术上讲,向量没有行,它们只有一个长度。)因为您在问题中指定了向量,并说您对备选方案不感兴趣,所以我在问题中避免了这一点。也许你在想
NROW
,它对向量更友好?好的,我知道了。哎呀!巨掌!从文档中,完全不清楚nrow()是否只适用于数据帧。那么
nrow()
应该如何工作呢?我不明白你的第一句话,谢谢。好的,我明白了。哎呀!巨掌!从文档中完全不清楚
nrow()
是否只适用于数据帧。@Hemanthabakaya
nrow
nrow
的文档在同一页上。所以你可能会因此感到困惑
nrow
在数据帧上工作,
nrow
在数据帧和向量上工作,但它们是不同的函数。那么
nrow()
应该如何工作呢?我不明白你的第一句话,谢谢。好的,我明白了。哎呀!巨掌!从文档中完全不清楚
nrow()
是否只适用于数据帧。@Hemanthabakaya
nrow
nrow
的文档在同一页上。所以你可能会因此感到困惑
nrow
适用于数据帧,
nrow
适用于数据帧和向量,但它们是不同的函数。