Es scheint mir, dass es keinen einfachen Weg gibt, dies ohne eine Schleife zu tun. Für jedes Element in my_query
, können wir eine der folgenden Funktionen verwenden, um TRUE
oder FALSE
zu erhalten:
f1 <- function (pattern, x) length(grep(pattern, x)) > 0L
f2 <- function (pattern, x) any(grepl(pattern, x))
Zum Beispiel
f1(my_query[1], my_data)
# [1] FALSE
f2(my_query[1], my_data)
# [1] FALSE
Dann verwenden wir *apply
Schleife anwenden, sagen f2
allen Elemente von my_query
:
which(unlist(lapply(my_query, f2, x = my_data)))
# [1] 2
Danke, das scheint zu funktionieren. Um ehrlich zu sein, habe ich Ihre Originalversion bevorzugt. Ich bin mir nicht sicher, warum Sie mit dem Erstellen einer anderen Funktion bearbeitet haben, um anschließend mit *apply
aufzurufen. Gibt es einen Vorteil gegenüber which(lengths(lapply(my_query, grep, my_data)) > 0L)
?
Nun, ich bin mir nicht ganz sicher. Als ich ?lengths
lesen:
One advantage of ‘lengths(x)’ is its use as a more efficient
version of ‘sapply(x, length)’ and similar ‘*apply’ calls to
‘length’.
Ich weiß nicht, wie viel effizienter, dass lengths
mit sapply
verglichen wird. Wenn es immer noch eine Schleife ist, führt mein ursprünglicher Vorschlag which(lengths(lapply(my_query, grep, my_data)) > 0L)
2 Schleifen durch. Mein Edit besteht im Wesentlichen aus zwei Loops, die hoffentlich einen Boost bekommen (wenn auch nicht zu klein).
Sie können immer noch mein neues bearbeiten in einer einzigen Zeile anordnen:
which(unlist(lapply(my_query, function (pattern, x) any(grepl(pattern, x)), x = my_data)))
oder
which(unlist(lapply(my_query, function (pattern) any(grepl(pattern, my_data)))))
Einige Ideen: 'sapply (meine_Abfrage, grepl, x = meine_Daten)', 'sapply (meine_Abfrage, grepl, x = meine_Daten)'. Du könntest den zweiten in 'which()' einpacken. – Gregor
Danke, Gregor. Ich denke, die 2 Beispiele sind identisch.Außerdem gibt es mir eine Matrix zurück, wie du sagst, ich würde es so einwickeln müssen, um die Spaltennummer der Matrix zu erhalten. Ich denke, – madmaxthc
Entschuldigung, meinte der zweite sei "sapply" (my_query, function (q) any (grepl (q, my_data))) '', was zu 'what (sapply (my_query, function (q) any (grepl (q, my_data))) 'führt. Aber mehr oder weniger was Zheyuan gepostet hat. – Gregor