Функция для объединения двух векторов в информационный фрейм с сохранением имен векторов - PullRequest
0 голосов
/ 06 марта 2019

У меня есть два вектора

randomName1 = c(4,5,6,3,2,1)
randomName2 = c(3,4,5,6,7,4)

может легко слиться в фрейм данных с этой простой функцией

fun = function(x, y) {
    df = data.frame(x, y)
   df
}

fun(randomName1,randomName2)
  x y
1 4 3
2 5 4
3 6 5
4 3 6
5 2 7
6 1 4

, но векторы потеряли свои имена.Вы можете добавить еще два аргумента в функцию и сделать это:

fun = function(x, y, name1, name2) {
   df = data.frame(x, y)
   colnames(df) = c(name1, name2)
   df
}

fun(randomName1, randomName2, "randomName1", "randomName2")
  randomName1 randomName2
1           4           3
2           5           4
3           6           5
4           3           6
5           2           7
6           1           4

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

1 Ответ

2 голосов
/ 06 марта 2019

Проблема в том, что когда вы передаете 2 вектора в вашу функцию, используя аргументы x и y, они переименовываются в области действия функции как x и y. Таким образом, когда вы помещаете их в фрейм данных с data.frame(x,y), их новые имена сохраняются в colnames.

Чтобы предотвратить это, вам нужно передать их с их оригинальными именами, что вы можете сделать, используя ...:

f <- function(...) {
    df <- data.frame(...)
    return(df)
}

f(randomName1, randomName2)
  randomName1 randomName2
1           4           3
2           5           4
3           6           5
4           3           6
5           2           7
6           1           4

Аргумент ... захватывает все аргументы, которые не назначены именованному аргументу, и делает их доступными в функции. Поскольку мы не присваивали randomName1 и randomName2 аргументу, они передаются в data.frame с их исходными именами, и эти имена сохраняются в df

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...