2016-08-05 26 views
1

Ich arbeite mit einem lokalen Repo und stolperte über etwas, das mein Verständnis der Indizierung einer Liste verwirrt.R unerwartetes Verhalten Liste in data.table umwandeln, wenn die Liste singulär ist

as.data.table(
available.packages(url, type="win.binary")[, c("Package","Version","Depends","Repository")] 
) 

Wenn der Repo auf 'url' mehrere Pakete hat erhalte ich erwartete Ergebnisse:

 Package Version  Depends          Repository 
1: truncnorm 1.0-7 R (>= 2.15.0)  file:///D:/Repo/bin/windows/contrib/3.3 
2:  yacca 1.1 R (>= 1.8.0), utils file:///D:/Repo/bin/windows/contrib/3.3 

Aber wenn das Repo-1-Paket hat nur:

         V1 
1:        truncnorm 
2:         1.0-7 
3:       R (>= 2.15.0) 
4: file:///D:/Repo/bin/windows/contrib/3.3 

Es scheint, umgewandelt zu haben die Listenzeile zu einer Spalte. Warum behandelt es eine einzelne Listenkomponente als Vektor (oder ist etwas anderes los)?

+3

Ich vermute, verwenden zu stoppen, die diese Umwandlung geschieht, wenn entweder Sie anrufen oder Teilmenge 'available.packages'. Anstatt eine Zeichenmatrix zurückzugeben, gibt sie einen Zeichenvektor zurück. R macht diese Vereinfachung ziemlich regelmäßig. Wenn Sie dieses Verhalten nicht wünschen, 'available.packages (url, type =" win.binary ") [, c (" Paket "," Version "," Depends "," Repository "), drop = FALSE]' könnte funktionieren. Siehe 'help (" [")' für weitere Informationen über das Drop-Argument – lmo

+0

Dank @lmo, diese Hilfeseite ist genau das, worauf ich hingewiesen werden musste. –

+0

@ShayneH Sie können Ihre Frage selbst beantworten oder einfach löschen – jangorecki

Antwort

0

Beantwortet von @lmo

R wird standardmäßig Zusammenbruch eine Dimension, wenn es überflüssig ist. dieses Verhalten die Option Drop = FALSE

available.packages(url, type="win.binary")[, c("Package","Version","Depends","Repository"), drop=FALSE]