函数中的代码有效,但函数本身不起作用

时间:2019-04-17 14:55:08

标签: r function

假设我有这个数据框:

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 个答案:

答案 0 :(得分:4)

如果函数结尾处带有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)

答案 1 :(得分:2)

继续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