Код внутри функции работает, но сама функция не работает - PullRequest
1 голос
/ 17 апреля 2019

Предположим, у меня есть этот фрейм данных:

df <- data.frame(A = letters[1:5],
                B = letters[6:10],
                stringsAsFactors = FALSE)
  A B
1 a f
2 b g
3 c h
4 d i
5 e j

Где я ищу этот вывод:

  A B
1 e j
2 d i
3 c h
4 b g
5 a f

С этой функцией:

f_Order <- function(df){
  df$Order <- as.integer(row.names(df))
  df <- arrange(df, desc(Order))[,c("A","B")]
}

Хотя вышеприведенная функция не работает, код внутри функции работает отлично:

df$Order <- as.integer(row.names(df))
df <- arrange(df, desc(Order))[,c("A","B")]
> x
  A B
1 e j
2 d i
3 c h
4 b g
5 a f

Почему?Как заставить функцию работать?

РЕДАКТИРОВАТЬ:

Чтобы уточнить, постановка задачи: не , чтобы изменить порядок df,но заставить функцию f_Order работать.Код делает то, что я хочу, но не то, что я хочу внутри этой функции.Мне нужно знать, почему и как я могу заставить функцию работать.

EDIT2:

Это именно тот код, который я запускаю, и до сих пор не 'не работает ни одно из решений.

x <- data.frame(A = letters[1:5],
                B = letters[6:10],
                stringsAsFactors = FALSE)

f_Order <- function(df){
  df$Order <- as.integer(row.names(df))
  df <- arrange(df, desc(Order))
  return(df)
}
f_Order(x)

Ответы [ 2 ]

4 голосов
/ 17 апреля 2019

Что если у вас есть return() в конце вашей функции? Как то так:

f_Order <- function(df){
  df$Order <- as.integer(row.names(df))
  df <- arrange(df, desc(Order))[,c("A","B")]
  return(df)
}

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

Выход:

> f_Order(df)
  A B
1 e j
2 d i
3 c h
4 b g
5 a f

Если вы хотите обновить df, запустите df <- f_Order(df).

2 голосов
/ 17 апреля 2019

Продолжая с dplyr:

f_Order <- function(df){
  #df$Order <- as.integer(row.names(df))
  df %>% 
    mutate(Order=row.names(.)) %>% 
  arrange(desc(Order))
}

Если мы не хотим сохранять Order:

 f_Order <- function(df){

      df %>% 
         arrange(desc(row.names(.)))
    }

Результат:

f_Order(df)
   A B
1 e j
2 d i
3 c h
4 b g
5 a f
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...