Передача имен столбцов в виде строки с - PullRequest
0 голосов
/ 11 декабря 2018

В следующем примере:

sort_by_column <- function(x = mtcars, col = "cyl") {
    col <- deparse(substitute(col))
    x[with(x, order(col)),]
}

sort_by_column(col = "cyl")

Я хотел бы передать имя столбца в виде строки в with как в:

sort_by_column(col = "cyl")

Ожидаемые результаты

mtcars[with(mtcars, order(cyl)),]

Задача

Создание аргумента "cyl" в виде вызова with в виде cyl.

Примечания

  • Я не хочу изменять x[with(x, order(col)),] выражение
  • Меня не интересует dplyr::arrange решение

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Вот случай, когда мы можем использовать [[ для поднабора

sort_by_column <- function(x = mtcars, col = "cyl") {
    x[order(x[[col]]),]
   }

sort_by_column(col = "cyl")
#                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
#Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
#Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
#Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
#Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
#Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
#Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
#Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
#Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
#Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
#Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
#Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
#Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
#Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
#Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
#....
0 голосов
/ 11 декабря 2018

Поскольку мы хотим оценить значение с помощью with, мы можем использовать get здесь

sort_by_column <- function(x = mtcars, col = "cyl") {
    x[with(x, order(get(col))),]
}

sort_by_column(col = "cyl")

#                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
#Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
#Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
#Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
#Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
#Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
#Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
#Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
#Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
#Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
#Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
#Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
#Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
#Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
#......
...