Как использовать colnames () внутри функции в R, не превращая числовой вывод в символ? - PullRequest
2 голосов
/ 07 мая 2020

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

Для этого я попытался использовать colnames().

Результатом неудачной операции является character вместо правильного фрейма данных. Вот небольшой воспроизводимый пример, который прямо касается проблемы.

# Fake Data

numbers = rnorm(5)

# Functions ---------------------------------------------------------------

# Dataframe is generated correctly. 

print_df_right = function(my_input){
   number_df = data.frame(my_input)
}

foo = print_df_right(numbers)
foo # A correct, column-nameless dataframe
#>     my_input
#> 1  0.3379014
#> 2  0.5306519
#> 3  0.7689149
#> 4 -0.5548860
#> 5 -2.1199438


# Dataframe is ruined because colnames() turns it into a vector.
ruin_my_df = function(my_input){
   number_df = data.frame(my_input)
   colnames(number_df) = c("numbers")
}

foo = ruin_my_df(numbers)
foo # This was supposed to be a dataframe, but instead is a character.
#> [1] "numbers"

Ответы [ 2 ]

3 голосов
/ 07 мая 2020

Нам нужно вернуть набор данных. В функции OP он возвращает последнее выражение, т.е. присваивает имена столбцов «числам», и, поскольку есть только один столбец, было возвращено имя столбца «числа»

ruin_my_df_corrected <- function(my_input){
   number_df <- data.frame(my_input)
   colnames(number_df) <- c("numbers")
   number_df
   }

Или вместо создания нескольких операторы, это может быть один

ruin_my_df_corrected <- function(my_input){
        setNames(data.frame(my_input), "numbers")

  }
2 голосов
/ 07 мая 2020

Однострочный:

names_right_df <- function(my_input) data.frame(numbers = my_input)

names_right_df(numbers)
#     numbers
#1 -0.7654521
#2  1.0077708
#3  1.1608095
#4  1.1352666
#5 -1.0030617
...