Аббревиатура для wrapr :: lambda не работает на окнах

Nicolas2 спросил: 28 апреля 2018 в 08:45 в: r

В виньете функции wrapr написано, что следующий код должен работать, хотя и не соответствует стандартным именованиям для имени функции.

library(wrapr)
wrapr::defineLambda()
sapply(1:4, λ(x, x^2))

эффективно работает на моей машине LINUX, но не в Windows, где интерпретатор, кажется, отклоняет специальный символ. Есть ли возможность указать, чтобы этот пример работал?

2 ответа

Shique ответил: 28 апреля 2018 в 09:51

Я думаю, что defineLambda() должен быть вызван в вызове sapply

sapply(1:4, defineLambda()(x, x^2))
#[1]  1  4  9 16

или

sapply(1:4, 'λ'(x, x^2))
#[1]  1  4  9 16
Nicolas2 ответил: 28 апреля 2018 в 09:38
Нет полного имени λ - это просто лямбда. Функция defineLambda используется для создания псевдонима. Но проблема заключается не в том, чтобы использовать полное имя (obvioulsy, он работает), а для использования односимвольной аббревиатуры как на LINUX, так и на Windows.
Shique ответил: 28 апреля 2018 в 09:51
Хм, окружая его одинарными кавычками, он работает.
Nicolas2 ответил: 28 апреля 2018 в 10:10
Но он работает без них на LINUX!
42- ответил: 28 апреля 2018 в 11:00
Мое понимание правил именования R заключается в том, что имена / символы R должны начинаться с периода или буквы. Как и многие другие аспекты кросс-платформенного поведения, я предполагаю, что допустимый набор "букв" может отличаться от ОС к ОС, а также от локального до локали.
Aramis7d ответил: 29 апреля 2018 в 06:50

Если односимвольная аббревиатура - это то, о чем вы заботитесь, то она работает с любым из алфавитов в widnows. например

a <- lambda(x, x^2)
sapply(1:4, a)

дает

[1]  1  4  9 16

Я признаю, что забавно, что специальный символ не будет работать на окнах.


Этот ответ предлагает использовать backticks для использования специальных символов, например:

`\λ` <- lambda(x, x^2)
sapply(1:4, `\λ`)

, который дает:

[1]  1  4  9 16
Nicolas2 ответил: 29 апреля 2018 в 06:15
Кажется, что существует проблема вокруг локали, как это было предложено в 42. Но в R существует также непостоянство, потому что grepl ("\\ p {L}", intToUtf8 (955), perl = TRUE) возвращает TRUE ( lambda - это алфавитный символ)