Я хочу, чтобы функция возвращала два значения, разделенных длинной вертикальной линией (|)

FUN1 <- function(x) {
  attach(x)
  return(min(x2))
}

FUN2 <- function(x) {
  attach(x)
  return(x1[which.min(x2)])
}


set.seed(1)
x <- data.frame(
  x1 = 1:10,
  x2 = rnorm(10)
)
FUN1(x)
FUN2(x)

Я хочу объединить две функции (FUN1 и FUN2) в одну и получить такой результат:

-0,8356286 | 3

r
0
Daniel James 18 Сен 2021 в 08:15

2 ответа

Лучший ответ

Мы можем создать третью функцию для объединения вывода из FUN1 и FUN2.

FUN1 <- function(x) {
  return(with(x, min(x2)))
}

FUN2 <- function(x) {
  return(with(x, x1[which.min(x2)]))
}

FUN3 <- function(x) {
  paste(round(FUN1(x), 3), FUN2(x), sep = '|')
}

FUN3(x)
#[1] "-0.836|3"

Если вы хотите полностью исключить FUN1 и FUN2.

FUN3 <- function(x) {
  with(x, paste(round(min(x2), 3), x1[which.min(x2)], sep = '|'))
}
1
Ronak Shah 18 Сен 2021 в 05:35
library(dplyr)

x %>% 
  filter(x2 == min(x2)) %>% 
  mutate(out = paste0(round(x2,7),"|",x1)) %>% 
  pull(out)

"-0,8356286|3"
1
Vinícius Félix 18 Сен 2021 в 05:20