R - упорядочить файл данных по имени столбца AS CHARACTER

Я понимаю, что я могу заказать data.frame как таковой:

test = data.frame(A=c(4,2,4), B=c(8,3,2))
ordered = test[with( test, order(A,B)) , ]

Но как я могу выполнить одно и то же, когда столбцы указаны по имени столбца как символьная переменная? Это не работает:

test = data.frame(A=c(4,2,4), B=c(8,3,2))
cols = c( "A" , "B" )
ordered = test[ with( test, order(cols )) , ]

Есть ли способ конвертировать "B" в B, чтобы распознать столбец? У меня, похоже, довольно часто возникает эта проблема с функциями, которые принимают значения имени столбца. Есть ли какой-нибудь термин для описания этого проблемного пространства в R (символьный идентификатор по сравнению с несимвольным идентификатором)?

Ответ 1

Попробуйте вместо этого:

ordered = test[ with( test, order(B)) , ]

Или:

 ordered2 = test[ order( test[["B"]] ) , ]

Вторая форма позволит вам сделать что-то вроде:

colnm <- "B"
ordered2 = test[ order(test[[colnm]]) , ]

Для более чем одного столбца для заказа вам нужно использовать do.call(пример со страницы справки):

d4 <- data.frame(x = round(   rnorm(100)), y = round(10*runif(100)),
                  z = round( 8*rnorm(100)), u = round(50*runif(100)))
d4s <- d4[ do.call(order, d4[ , c("x", "y") ] ), ]