Warum akzeptiert dcast x [Länge (x)] nicht?

2
Accidental Statistician 2019-09-17 16:13.

Ich habe mich bemüht, dcastdurch das letzte Element zu aggregieren. Hier ist ein Beispiel:

x <- data.table::data.table(foo = "bar", value = c(1, 0))
x

#    foo value
# 1: bar     1
# 2: bar     0
data.table::dcast(x, ... ~ foo, fun.aggregate = function(x) x[length(x)])

# Error: Aggregating function(s) should take vector inputs and return a single value (length=1).
# However, function(s) returns length!=1. This value will have to be used to fill any missing
# combinations, and therefore must be length=1. Either override by setting the 'fill' argument
# explicitly or modify your function to handle this case appropriately.

Dies geschieht auch mit der reshape2Version von dcastund bei Verwendung von a data.frameanstelle von a data.table.

Es gibt Möglichkeiten, wie ich das zum Laufen bringen kann. Zum Beispiel kann ich verwenden

data.table::dcast(x, ... ~ foo, fun.aggregate = function(x) rev(x)[1L])

#    . bar
# 1: .   0

und erhalten Sie das erwartete Ergebnis. Die dplyr::last()Funktion funktioniert auch data.table::last()nicht.

Was mich jedoch interessiert, ist, warum die Verwendung x[length(x)]nicht funktioniert. Wenn ich in die Aggregationsfunktion Zwischendruckbefehle einfüge, um herauszufinden, was passiert, erhalte ich Folgendes:

data.table::dcast(x, ... ~ foo,
                  fun.aggregate = function(x) {print(x); print(length(x)); 5L}, value.var = "value")

# numeric(0)
# [1] 0
# [1] 1 0
# [1] 2
#    . bar
# 1: .   5

Dies deutet darauf hin, dass dcastüber einen Wert iteriert foowird, der nicht in der Tabelle enthalten ist und an keiner anderen Stelle vorhanden sein kann, da fooes sich um einen einfachen Zeichenvektor handelt, nicht um einen Faktorvektor. Was ist los?

RVersion: 3.6.0 data.tableVersion: 1.12.2

1 answers

3
Mikko Marttila 2019-09-18 02:50.

Es scheint, dass beide data.table::dcast.data.table()und reshape2::dcast()erwarten, dass die Aggregationsfunktion einen Wert der Länge 1 für die Eingabe der Länge 0 zurückgibt. Beide Funktionen versuchen, einen "Standardwert" zu erhalten, indem sie die Aggregationsfunktion mit einem Argument der Länge 0 aufrufen.

Der relevante Teil des data.table-Codes ist hier und sieht folgendermaßen aus:

fill.default = suppressWarnings(dat[0L][, eval(fun.call)])
if (nrow(fill.default) != 1L) stop(errmsg, call.=FALSE)

reshape2 fordert vaggregate()von plyr, die einen ähnlichen Teil hat hier :

.default <- .fun(.value[0], ...)

Im Fall des x[length(x)]Standardwerts, den beide Funktionen erhalten, ist dies im Wesentlichen:

last <- function(x) x[length(x)]
last(numeric())
#> numeric(0)

Das heißt, ein Vektor der Länge 0. Für beide Funktionen muss der Standardwert jedoch die Länge 1 haben, daher der Fehler.

Funktioniert schließlich, dplyr::last()weil es NAfür eine Eingabe der Länge 0 zurückgibt :

dplyr::last(numeric())
#> [1] NA

Related questions

MORE COOL STUFF

Cate Blanchett schlief nach 3 gemeinsamen Tagen mit ihrem Ehemann und ist 25 Jahre später immer noch mit ihm verheiratet

Cate Blanchett schlief nach 3 gemeinsamen Tagen mit ihrem Ehemann und ist 25 Jahre später immer noch mit ihm verheiratet

Cate Blanchett widersetzte sich typischen Dating-Ratschlägen, als sie ihren Ehemann traf.

Warum Michael Sheen ein gemeinnütziger Schauspieler ist

Warum Michael Sheen ein gemeinnütziger Schauspieler ist

Michael Sheen ist ein gemeinnütziger Schauspieler, aber was genau bedeutet das?

Hallmark-Star Colin Egglesfield sorgt für spannende Fan-Begegnungen bei RomaDrama Live! [Exklusiv]

Hallmark-Star Colin Egglesfield sorgt für spannende Fan-Begegnungen bei RomaDrama Live! [Exklusiv]

Hallmark-Star Colin Egglesfield sprach über spannende Fan-Begegnungen bei RomaDrama Live! plus sein INSPIRE-Programm auf der Convention.

Warum Sie „Northern Exposure“ nicht online streamen können

Warum Sie „Northern Exposure“ nicht online streamen können

Sie müssen einen Blu-ray- oder DVD-Player abstauben, um zu sehen, warum Northern Exposure zu einer der beliebtesten Shows der 90er Jahre wurde.

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

Werfen Sie diese Pappröhren nicht weg! 10 Möglichkeiten, sie wiederzuverwenden

Werfen Sie diese Pappröhren nicht weg! 10 Möglichkeiten, sie wiederzuverwenden

Werfen Sie Ihr Papierhandtuch, Toilettenpapier und Geschenkpapierrollen nicht in den Müll. Geben Sie ihnen stattdessen mit einem dieser 10 Hacks ein zweites Leben.

Schlafen Fische?

Schlafen Fische?

Es ist schwer vorstellbar, dass Nemo im Great Barrier Reef ein paar Zs fängt. Aber Fische brauchen Ruhe. Schlafen sie so wie wir?

Spenden Sie Ihr Haar, um unser Wasser sauber zu halten

Spenden Sie Ihr Haar, um unser Wasser sauber zu halten

Haarteile aus Salons und persönliche Spenden können als Matten wiederverwendet werden, die Ölverschmutzungen aufsaugen und zum Schutz der Umwelt beitragen.

Die tiefen Spaltungen unseres Landes haben einen Silberstreifen: kürzeres Thanksgiving-Abendessen

Die tiefen Spaltungen unseres Landes haben einen Silberstreifen: kürzeres Thanksgiving-Abendessen

Unabhängig von Ihrer politischen Zugehörigkeit sind die Vereinigten Staaten derzeit nicht so einig. Wir leben in einem us-vs.

Südwestflug umgeleitet, nachdem Passagier versucht hatte, dem Mile-High Weed Club beizutreten

Südwestflug umgeleitet, nachdem Passagier versucht hatte, dem Mile-High Weed Club beizutreten

Flugzeuge von Southwest Airlines sitzen am 15. August 2015 in Baltimore vor ihren Toren am internationalen Flughafen Baltimore-Washington.

Welt erträgt einen weiteren schlampigen Auszug

Welt erträgt einen weiteren schlampigen Auszug

Präsident Donald Trump hat seinen Gipfel mit dem nordkoreanischen Diktator Kim Jong Un mit einem Brief abgesagt, der ohne Übertreibung eines der seltsamsten Dinge ist, die ich je in meinen 28 Jahren auf Erden gelesen habe. In dem unglücklichen Stück Geschichte, das Sie oben sehen, verwendet das Weiße Haus von Trump eine bizarre Mischung aus liebevollem, fast sinnlichem Bedauern, der Gefahr einer globalen Atomkatastrophe und grammatikalischen Fehlern, um seinem nordkoreanischen Amtskollegen öffentlich mitzuteilen, dass das Treffen nicht stattfindet.

Wissenschaftler finden eine weitere mögliche Erklärung dafür, warum Haare grau werden

Wissenschaftler finden eine weitere mögliche Erklärung dafür, warum Haare grau werden

Das grizzled Fell dieser Maus könnte uns eines Tages helfen zu erklären, warum Menschen eine seltene Krankheit namens Vitiligo entwickeln können. Wissenschaftler glauben, auf einen neu entdeckten Mechanismus gestoßen zu sein, der erklären könnte, warum die Haare einiger Menschen grau werden und andere von Flecken unpigmentierter Haut befallen werden, einer seltenen, stigmatisierten Erkrankung namens Vitiligo.

Tudor Dixon gewinnt Michigan GOP Primary und trifft nun auf die amtierende Demokratin Gretchen Whitmer

Tudor Dixon gewinnt Michigan GOP Primary und trifft nun auf die amtierende Demokratin Gretchen Whitmer

Tudor Dixon hat am Dienstag die Vorwahlen von Michigan zum Gouverneur gewonnen, nachdem er eine späte Bestätigung des ehemaligen Präsidenten Donald Trump erhalten hatte

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Rothschild's luggage got lost, but luckily she has an incredible closet to shop: Sister Paris Hilton's!

Kate Middleton verbringt einen Tag am Wasser in London, plus Jennifer Lopez, Julianne Hough und mehr

Kate Middleton verbringt einen Tag am Wasser in London, plus Jennifer Lopez, Julianne Hough und mehr

Kate Middleton verbringt einen Tag am Wasser in London, plus Jennifer Lopez, Julianne Hough und mehr. Von Hollywood bis New York und überall dazwischen, sehen Sie, was Ihre Lieblingsstars vorhaben!

17-Jähriger erstochen, während 4 weitere bei einem Messerangriff am Wisconsin River verwundet wurden

17-Jähriger erstochen, während 4 weitere bei einem Messerangriff am Wisconsin River verwundet wurden

Die Ermittler prüfen, ob sich die Gruppe und der Verdächtige vor dem Angriff kannten

Stellen Sie sich vor, Sie erstellen eine Inhaltsstrategie, die tatsächlich KONVERTIERT. Es ist möglich.

Stellen Sie sich vor, Sie erstellen eine Inhaltsstrategie, die tatsächlich KONVERTIERT. Es ist möglich.

Im Jahr 2021 ermutige ich Sie, alles zu überdenken, was Sie über die Kunden, die Sie bedienen, und die Geschichten, die Sie ihnen erzählen, wissen. Zurücktreten.

Ein Mammutverlust öffnete mein Herz für die Liebe

Ein Mammutverlust öffnete mein Herz für die Liebe

Am Tag des 9. Geburtstags von Felix The Cat erinnere ich mich an einen der größten Verluste meines Erwachsenenlebens – meine Sophie im Jahr 2013. Ich habe diesen Essay geschrieben und ihn kurz im Jahr 2013 auf dieser Plattform geteilt.

Wenn Sie nicht die Person sein können, die das Internet von Ihnen will

Wenn Sie nicht die Person sein können, die das Internet von Ihnen will

Ich hasse das Wort „Zugwrack“. Die Menschen trösten sich mit ihrem eigenen moralischen Kompass und treffen dabei auf ein Urteil.

Die dezentralisierte Cloud-Vision der DFINITY Blockchain

Anmerkung des Herausgebers: Sie sehen veraltetes Material aus dem DFINITY-Blog, das zu Archivierungszwecken aufbewahrt wird.

Die dezentralisierte Cloud-Vision der DFINITY Blockchain

Dieser Beitrag untersucht die dezentralisierte Cloud-Vision des DFINITY-Teams und ihre Beziehung zu traditioneller Blockchain und bestehenden Cloud-Anbietern wie Amazon Web Services. Demonstrationen der DFINITY-Technologie, die von einem groß angelegten Netzwerk angewendet wird, werden im Herbst 2017 durchgeführt, gefolgt von einer Hauptfinanzierung für die unterstützende gemeinnützige Stiftung, wobei das „offene Cloud“-Netzwerk voraussichtlich im Frühsommer 2018 starten wird .

Language