簡體   English   中英

來自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設置為char ,我得到相同的結果。

我特別困惑,因為length(df[39,])得出[1] 155

背景是我正在使用grep搜索向量,但不適用於從列中獲取的向量。 當然,當我嘗試重新編碼標題中的所有行時,我可以按行而不是按列對它們進行編碼,因此我認為有一種解決方法。 但是, 是什么導致R假定test長度為1? 行和列的處理有什么區別?

每當對小標題應用[]操作時,總是返回另一個小標題。 這是基准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的返回類型已從原始類型更改。 同時,小標題以這種方式設計,以保持輸入和輸出類型之間的結構一致性。

如果要將小標題的某些列作為矢量處理,則有兩種方法。

  1. pull()
  2. [[ ]]

我個人使用的是pull() ,這也非常直觀。

為什么length(df[39,])產生155

我的理解是df[39,]給您一點點信息,它的暗淡為1 155 其長度等於列數。 為什么? 因為length也可以給出列表的長度。 在tibble和data.frame設計的背后,它們是由鏈表構造的。 每列實際上是一個列表。 這就是為什么您可以在一個小標題或data.frame中使用不同類型的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM