Moje odpowiedzi to:
- nie ("można wybrać w
dplyr
być stosowany z logicznym wektora?")
dowody: (1) Twój przykład, (2) strona help:
. ..: rozdzielana przecinkami lista niecytowanych wyrażeń. Można traktować zmienne o nazwach , tak jak są pozycjami. Użyj wartości dodatnich , aby wybrać zmienne; użyj wartości ujemnych, aby upuścić zmienne.
Nic nie mówi o wektorach logicznych. Przepraszam.
- Nie wiem ("dlaczego nie logiczne?") - "tylko dlatego" (nie sądzę, by ktokolwiek poza programistą mógł naprawdę odpowiedzieć na to pytanie). można umieścić we wniosku fabularnego ...
To trochę niezgrabne, ale
select_(dat,.dots=names(isNum)[isNum])
prace (zauważ, że trzeba wariant select_
aby umożliwić stosując wektor znaków). Ale dobry staromodny
subset(dat,select=isNum)
wydaje się działać zbyt dobrze (o ile nie jest on grać ładnie z dplyr
w jakiś inny sposób nie myślałem o).
Jeśli spojrzeć na kodzie dplyr:::starts_with
, widać, że zwraca wektor pozycjach, a nie logiczną wektor
function (vars, match, ignore.case = TRUE)
{
stopifnot(is.string(match), !is.na(match), nchar(match) >
0)
if (ignore.case)
match <- tolower(match)
n <- nchar(match)
if (ignore.case)
vars <- tolower(vars)
which(substr(vars, 1, n) == match)
}
miałem zamiar zaproponować, aby spróbować zmodyfikować tę funkcję, aby stworzyć is_numeric
odpowiednik, ale ja nie rozumiem podstawowej magii wystarczająco dobrze ...
ewentualnie [temat dla 'dplyr 0.3.1'] (https://github.com/hadley/dplyr/issues/497): "W ogóle, jaki jest najlepszy sposób filtrowania kolumn według jakiegoś warunku boolowskiego w' dplyr'? " – Henrik
Myślę, że powinieneś napisać 'select (dat, which (isNum))' jako odpowiedź (a nawet zaakceptować, jeśli wydaje się najlepszym rozwiązaniem) –