为什么长度函数在R中不能正确工作?

为什么长度函数在R中不能正确工作?,r,R,下面的R代码给出了小型车。但是length函数返回6而不是13。为什么呢 > fuel.frame[fuel.frame$Type=="Small",] row.names Weight Disp. Mileage Fuel Type 1 Eagle.Summit.4 30 0.97 33 3.030303 Small 2 Ford.Escort.4 28 114.00

下面的R代码给出了小型车。但是length函数返回6而不是13。为什么呢

> fuel.frame[fuel.frame$Type=="Small",]            

            row.names Weight  Disp. Mileage     Fuel  Type
1      Eagle.Summit.4     30   0.97      33 3.030303 Small
2       Ford.Escort.4     28 114.00      33 3.030303 Small
3      Ford.Festiva.4     23   0.81      37 2.702703 Small
4       Honda.Civic.4     27   0.91      32 3.125000 Small
5     Mazda.Protege.4     29 113.00      32 3.125000 Small
6    Mercury.Tracer.4     27   0.97      26 3.846154 Small
7     Nissan.Sentra.4     27   0.97      33 3.030303 Small
8    Pontiac.LeMans.4     28   0.98      28 3.571429 Small
9     Subaru.Loyale.4     27 109.00      25 4.000000 Small
10     Subaru.Justy.3     24   0.73      34 2.941176 Small
11   Toyota.Corolla.4     28   0.97      29 3.448276 Small
12    Toyota.Tercel.4     25   0.89      35 2.857143 Small
13 Volkswagen.Jetta.4     28 109.00      26 3.846154 Small

> length(fuel.frame[fuel.frame$Type=="Small",])

[1] 6

length
在这种情况下给出数据框中的列数。您可以使用
nrow
ncol
分别获取行数或列数:

nrow(fuel.frame[fuel.frame$Type=="Small",])
使用iris数据集的另一个示例:

> d = head(iris)
> d
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
> nrow(d)
[1] 6
> ncol(d)
[1] 5
> dim(d)
[1] 6 5

我想对你的结果做一点解释可能会有帮助。您询问的是data.frame的长度,而不是向量。因为data.frame有6列解释您的结果

这特别要求向量:

length(fuel.frame$Type[fuel.frame$Type=="Small"])
这也是:

length(fuel.frame[fuel.frame$Type=="Small",][,1])

或者使用
nrow
而不是前面建议的
length

返回的是列数而不是行数吗?您有行和列,因此长度没有意义。请尝试nrow(),值得注意的是,对于新用户来说,这很难理解为什么会这样:
?长度
表示“对于向量(包括列表)和因子,长度是元素的数量”,但如果您没有意识到数据帧继承自列表,则这并不是信息。或者
长度(fuel.frame[fuel.frame$Type==“Small”,1])
要结合第二个示例中的两个
[
操作。长度(fuel.frame$Type[fuel.frame$Type==“Small”])这表明我的错误是1.length(fuel.frame$Type[fuel.frame$Type==“Small”])还是2.length(fuel.frame[fuel.frame$Type==“Small”])给出我期望的结果。对于第二个选项,我们可以使用1到6之间的数字作为我的数据的列号。这解释了为什么我的代码没有给出期望的结果。谢谢。或者在本例中是
sum(fuel.frame$Type==“Small”)