2016-04-12 36 views
0

由於錯誤消息,我變得瘋狂。我使用了完全的腳本,但與另一個矩陣,我無法再計算rowsum了。rowSums - 由於數組而導致的錯誤

我得到這個惱人的錯誤消息:

x必須是至少兩個尺寸

的陣列我要計算第15列的矩陣中的衝擊行總和。

share <- rowSums(impact[,15],na.rm=T) 

head(impact) 
     ID key bank group iob X2014.01 X2014.02 X2014.03 X2014.04 X2014.05 X2014.06 X2014.07 X2014.08 X2014.09 X2014.10 X2014.11 X2014.12 X2015.01 X2015.02 X2015.03 X2015.04 X2015.05 X2015.06 X2015.07 X2015.08 
2 1 NA NA 2 1 0.445205069 0.472390737 0.870477062 0.217721722 0.45105155 0.081988816 0.787682077 0.117770855 0.140369528 0.369301296 0.134638046 0.317541225 0.119500371 0.04335953 0.21347215 0.98924849 0.056345003 0.630135217 0.775518542 0.497615742 
10 1 NA NA 2 1 0.168419591 0.425645354 0.646613563 0.664511712 0.750356605 0.93621874 0.535499019 0.654868051 0.346500111 0.257706661 0.538854079 0.440520153 0.902426669 0.62364293 0.034292533 0.164502657 0.708733663 0.416106117 0.55308097 0.961736416 
18 1 NA NA 2 1 0.619040555 0.831943026 0.502364121 0.897383629 0.161324917 0.645435861 0.381065769 0.144287435 0.211246426 0.824972697 0.966528838 0.084932473 0.401207104 0.828860666 0.094734978 0.998390905 0.761376766 0.544001075 0.901412357 0.611515683 
26 1 NA NA 2 1 0.650375963 0.82854139 0.678481275 0.053565344 0.725918141 0.462696627 0.781661878 0.247926698 0.896495716 0.067714926 0.854996151 0.007778748 0.087166199 0.162193333 0.337942796 0.924925652 0.629788632 0.199940498 0.394249739 0.296213669 
34 1 NA NA 2 1 0.550807858 0.422672911 0.975977621 0.686356795 0.161541393 0.51490188 0.206613536 0.042012755 0.625714656 0.260060599 0.920103236 0.995255399 0.155289084 0.361658753 0.911763522 0.671250837 0.993388857 0.390214068 0.945968449 0.274847887 
42 1 NA NA 2 1 0.934880255 0.920203832 0.432055682 0.598642825 0.175905258 0.533883496 0.002016901 0.001015627 0.14724496 0.655515358 0.659772253 0.102383326 0.59884333 0.949273788 0.656322346 0.87928498 0.676120876 0.834748556 0.657029437 0.877257774 
+1

'impact'似乎是一個向量。然而,沒有數據我們不能再多說了。你能否提供數據(例如影響負責人)? – DeveauP

+0

@DeveauP影響是根據R – richpiana

+4

的矩陣是的,但是您只提供第15列('impact [,15]'),它是一個向量,而不是矩陣。如果你想要每列的總和,使用'colSums(impact)'。如果你只想要第15列的總和,只需使用'sum(impact [,15])'。 – Laterow

回答

2

這裏的問題是,您正在嘗試僅使用列向量的rowSums

test_matrix <- matrix(1, nrow = 3, ncol = 2) 

如果我們只是在這裏抓住第二列,我們最終只有一個向量。

test_matrix[,2] 

[1] 1 1 1 

你不能把一個向量,這就是爲什麼你得到一個錯誤的rowSums。你有效地告訴R只抓取第15列中的數據(給你一個數字向量,嘗試class(impact[,15]),你會看到這是真的),然後試圖把它放入rowSums函數,這需要一個矩陣(不是一個向量)。如果您只是想要第15列的總和,那麼您只需取該子集的總和(即sum(impact[,15])。

0

單列的行和僅僅是該列本身的值。

因此,impact[, 15]是你想要的。

如果希望列的總和,sum(impact[, 15])是你想要的。

3

而不是使用多種功能取決於列的選擇數相同的操作,你應該直接解決的默認行爲。 ?`[`通知過程說:「結果被強制爲儘可能低的維度」,意味着如果有一列被子集化,它將被強制爲矢量。我們可以用drop=FALSE取消效果。例如:

rowSums(impact[, 15, drop=FALSE]) 

#Or subset without commas 
rowSums(impact[15]) 

相比,改變被編程時使用的功能這是有利的,我們可以用任何指標取代15的子集:

col_seq <- 1:ncol(impact) 
indx <- sample(col_seq, sample(col_seq), replace=TRUE) 
rowSums(impact[indx]) 

更新

讓我們進一步解釋爲什麼用另一個例子:

df <- head(mtcars) 
df[10:11] 
#     gear carb 
#Mazda RX4   4 4 
#Mazda RX4 Wag  4 4 
#Datsun 710   4 1 
#Hornet 4 Drive  3 1 
#Hornet Sportabout 3 2 
#Valiant    3 1 

如果我們想得到這個子集的行數,我們有幾個選項。請記住行數是什麼,每行的總和(即4+4 4+4 4+1 3+1 ...):

rowSums(df[10:11]) 
     Mazda RX4  Mazda RX4 Wag  Datsun 710 Hornet 4 Drive Hornet Sportabout   Valiant 
       8     8     5     4     5     4 

讓我們確定的答案是正確的:

all(rowSums(df[10:11]) == df[10] + df[11]) 
[1] TRUE 

如果我們有一列,該行資金,簡直是列本身:

df[10] 
#     gear 
#Mazda RX4   4 
#Mazda RX4 Wag  4 
#Datsun 710   4 
#Hornet 4 Drive  3 
#Hornet Sportabout 3 
#Valiant    3 

我們可以問,這個子集的行數是多少?它與其他的定義相同,即每行的總和。但在這種情況下,我們可以直接返回列。

爲什麼我們在這裏甚至不需要時也使用rowSums?因爲有時我們正在編程構建函數。我們可能不會預先知道該指數將是一個長度。如果我們有一個函數可以找到它是多列還是一列的函數,我們可以編程而不用擔心索引的長度:

all(rowSums(df[,10, drop=FALSE]) == df[10]) 
[1] TRUE 
+0

這不是一個錯誤。我會提供更多細節。 –

+0

沒必要,我明白了,謝謝。對困惑感到抱歉。我們以不同的方式解釋OP的意圖。現在我明白你是如何看到它的 - 儘管我傾向於堅持我的解釋。如果OP通過一個小例子發佈了期望的輸出結果(我認爲表達式「計算第15列的行數」並不是很清楚),那麼可以避免誤解。 – RHertel

+1

@RHertel我補充說明 –

相關問題