2017-01-16 1507 views
2

我試圖rbind數據幀的大列表(outputDfList),這是由lapply複雜的函數來生成的列表上一張大桌子。R:錯誤在PI [[J]]:下標出界 - rbind dataframes

df1=data.frame("randomseq_chr15q22.1_translocationOrInsertion", "chr15", "63126742") 
names(df1)=NULL 
df2=df1=data.frame("chr18q12.1_chr18q21.33_large_insertion", "chr18 ", "63126741") 
names(df2)=NULL 
outputDfList=list(df1,df2) 

我的代碼是

do.call(rbind, outputDfList) 

我收到錯誤消息:

Error in pi[[j]] : subscript out of bounds 

我仔細檢查了每個dataframes的列數,它們都是可以通過重新outputDfList相同。我也嘗試使用「選項(錯誤=恢復)」進行調試,但我並不熟悉它足以說明確切的問題。任何幫助表示讚賞。謝謝。

+0

我無法重現錯誤消息。您需要構建一個最小的示例來重現問題,併發布準確的代碼/數據以在此處重現。 [可能對此有幫助。](http://jennybc.github.io/reprex/) –

+0

@KonradRudolph非常感謝評論。你是對的。我添加了我的數據框的長名稱,現在我認爲它應該顯示錯誤。 – Helene

+0

不幸的是,這是不夠的,因爲我們仍然不確切地知道你的數據是什麼樣子的(如果我嘗試從你發佈的內容中重建你的數據,這個命令就起作用)。你可以把相關數據輸入嗎? –

回答

1

更新後,似乎你的問題是,你有無效的列名:數據幀列名必須是非空。

糾正此之後,代碼將工作:

for (i in seq_along(outputDfList)) { 
    colnames(outputDfList[[i]]) = paste0('V', seq_len(ncol(outputDfList[[i]]))) 
} 

do.call(rbind, outputDfList) 
#          V1  V2  V3 
# 1 chr18q12.1_chr18q21.33_large_insertion chr18 63126741 
# 2 chr18q12.1_chr18q21.33_large_insertion chr18 63126741 

不過,我納悶這種情況是如何發生在首位。此外,我與你的代碼收到錯誤消息是仍然您不同:

錯誤match.names(clabs,姓名(十一)):
名稱不曾用名

匹配
+0

感謝您的回覆。我也對此感到困惑......但你對我的數據框需要列名是絕對正確的。我將它添加到生成數據框列表的函數中,並且它工作正常。謝謝! – Helene