[英]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的返回類型已從原始類型更改。 同時,小標題以這種方式設計,以保持輸入和輸出類型之間的結構一致性。
如果要將小標題的某些列作為矢量處理,則有兩種方法。
pull()
[[ ]]
我個人使用的是pull()
,這也非常直觀。
為什么length(df[39,])
產生155
?
我的理解是df[39,]
給您一點點信息,它的暗淡為1 155
。 其長度等於列數。 為什么? 因為length也可以給出列表的長度。 在tibble和data.frame設計的背后,它們是由鏈表構造的。 每列實際上是一個列表。 這就是為什么您可以在一個小標題或data.frame中使用不同類型的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.