来自 tibble 的向量长度为 0
Vector from tibble has length 0
我有一个小问题 ('df')
> dim(df)
[1] 55 144
其中我提取了一个向量test <- c(df[,39])
。我希望得到以下结果:
> length(test)
[1] 55
因为我基本上是从我的标题中提取第 39 列。相反,我得到
> length(test)
[1] 1
现在,class(test)
产生了 list
,所以我认为 class 可能是原因;但是,将 class 设置为 char
,我得到相同的结果。
我特别困惑,因为 length(df[39,])
产生 [1] 155
。
背景是我正在使用 grep
在向量中搜索,这不适用于从列中获取的向量。当然,当我试图重新编码我的小标题中的所有行时,我可以按行而不是按列重新编码它们,所以我认为有一个解决方法。但是,是什么导致 R 假设 test
的长度为 1?行和列的处理有什么区别?
每当您对一个 tibble 应用 []
操作时,它总是 return 是另一个 tibble。这是 tibble 结构与基础 R 中的 data.frame 之间的差异之一。
例如:
a <- 1:5
df = tibble(a,b=a*2,c=a^2)
df2 = as.data.frame(df) # convert to base data.frame
df[,2] # give a tibble, its dim is 5 1
df2[,2] # give a vector, its dim is NULL, its length is 5.
您看到 data.frame 中的 return 类型已从原始类型更改。同时tibble的设计保持了输入输出类型的结构一致性。
如果你想将一个tibble的特定列处理为向量,有两种方法。
pull()
[[ ]]
我个人使用的是pull()
,也很直观。
为什么 length(df[39,])
产生 155
?
我的理解是df[39,]
给大家打个比方,暗淡的是1 155
。它的长度等于列数。为什么?因为 length 也可以给出列表的长度。 tibble和data.frame的设计背后,都是用链表构造的。每一列实际上是一个列表。这就是为什么你可以在一个小标题或 data.frame 中有不同的类型。
我有一个小问题 ('df')
> dim(df)
[1] 55 144
其中我提取了一个向量test <- c(df[,39])
。我希望得到以下结果:
> length(test)
[1] 55
因为我基本上是从我的标题中提取第 39 列。相反,我得到
> length(test)
[1] 1
现在,class(test)
产生了 list
,所以我认为 class 可能是原因;但是,将 class 设置为 char
,我得到相同的结果。
我特别困惑,因为 length(df[39,])
产生 [1] 155
。
背景是我正在使用 grep
在向量中搜索,这不适用于从列中获取的向量。当然,当我试图重新编码我的小标题中的所有行时,我可以按行而不是按列重新编码它们,所以我认为有一个解决方法。但是,是什么导致 R 假设 test
的长度为 1?行和列的处理有什么区别?
每当您对一个 tibble 应用 []
操作时,它总是 return 是另一个 tibble。这是 tibble 结构与基础 R 中的 data.frame 之间的差异之一。
例如:
a <- 1:5
df = tibble(a,b=a*2,c=a^2)
df2 = as.data.frame(df) # convert to base data.frame
df[,2] # give a tibble, its dim is 5 1
df2[,2] # give a vector, its dim is NULL, its length is 5.
您看到 data.frame 中的 return 类型已从原始类型更改。同时tibble的设计保持了输入输出类型的结构一致性。
如果你想将一个tibble的特定列处理为向量,有两种方法。
pull()
[[ ]]
我个人使用的是pull()
,也很直观。
为什么 length(df[39,])
产生 155
?
我的理解是df[39,]
给大家打个比方,暗淡的是1 155
。它的长度等于列数。为什么?因为 length 也可以给出列表的长度。 tibble和data.frame的设计背后,都是用链表构造的。每一列实际上是一个列表。这就是为什么你可以在一个小标题或 data.frame 中有不同的类型。