функции более высокого уровня в R - есть ли официальный оператор compose или функция карри?

Для более новых версий Ubuntu с PHP 7.0 вы можете получить пакет php-mysql:

sudo apt-get install php-mysql

Затем перезагрузите сервер:

sudo service apache2 restart
37
задан Nathan Shively-Sanders 9 February 2010 в 14:16
поделиться

2 ответа

Обе эти функции фактически существуют в пакете roxygen ( см. Исходный код здесь ) от Питера Даненберга (изначально был основан на решении Байрона Эллиса в R-Help ):

Curry <- function(FUN,...) {
  .orig = list(...);
  function(...) do.call(FUN,c(.orig,list(...)))
}

Compose <- function(...) {
  fs <- list(...)
  function(...) Reduce(function(x, f) f(x),
                       fs,
                       ...)
}

Обратите внимание на использование функции Reduce , которая может быть очень полезной при попытке для выполнения функционального программирования на R. См.? Reduce для более подробной информации (которая также охватывает другие функции, такие как Map и Filter ).

И ваш пример Curry (немного отличается в этом использовании):

> library(roxygen)
> p <- Curry(paste, collapse="")
> p(letters[1:10])
[1] "abcdefghij"

Вот пример, демонстрирующий полезность Compose (применение трех разных функций к буквам):

> Compose(function(x) x[length(x):1], Curry(paste, collapse=""), toupper)(letters)
[1] "ZYXWVUTSRQPONMLKJIHGFEDCBA"

И ваш последний пример будет работать следующим образом:

> aggregate(df[,"t"], df["l"], Compose(Curry(paste, collapse=""), toupper))
  l    x
1 1  ABG
2 2 DEFH
3 3  CIJ

Наконец, вот способ сделать то же самое с plyr (также можно легко сделать с с помощью или aggregate , как уже показано):

> library(plyr)
> ddply(df, .(l), function(df) paste(toupper(df[,"t"]), collapse=""))
  l   V1
1 1  ABG
2 2 DEFH
3 3  CIJ
28
ответ дан 27 November 2019 в 04:59
поделиться

В пакете roxygen есть функция Curry.
Найдено через этот разговор в архиве R Mail.

2
ответ дан 27 November 2019 в 04:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: