Запуск системных команд Rscript с помощью openssl

У меня возникла небольшая проблема с получением R для выполнения системной команды для меня. Системная команда openssl очень проста.

Я в системе Windows.

Если я выполню следующий код либо в командной строке cmd.exe, либо в powershell, он будет работать так, как ожидалось:

## echo "the name of the dog is bruce" | openssl enc -base64
dGhlIG5hbWUgb2YgdGhlIGRvZyBpcyBicnVjZQo=

Однако, когда я пытаюсь преобразовать это обратно в исходную строку в моем R-скрипте, это не работает:

mydata <- "dGhlIG5hbWUgb2YgdGhlIGRvZyBpcyBicnVjZQo="
system(sprintf("echo '%s' | openssl enc -base64 -d", mydata))

Он жалуется на то, что echo не найден.

Warning message:
'echo' not found

Я знаю, что есть пакеты, которые я могу загрузить, однако я хотел бы решить эту проблему с помощью базовых пакетов, поставляемых с R. Поскольку openssl не является частью базы, я прибегаю к описанному выше методу (который я знать неэффективно, поэтому, пожалуйста, успокойтесь на меня).

Я пытался:

system2(sprintf("echo '%s' | openssl enc -base64 -d", mydata))

и

shell(sprintf("echo '%s' | openssl enc -base64 -d", mydata))

Ни один из них не работал.


person KLZY    schedule 18.06.2020    source источник


Ответы (1)


Используя shell(), укажите полный путь к файлу openssl, и он должен работать. Обратите внимание, что вам нужно использовать аргумент intern = TRUE, чтобы он возвращал объект R, который можно назначить.

mydata <- "dGhlIG5hbWUgb2YgdGhlIGRvZyBpcyBicnVjZQo="
shell(sprintf("echo %s | \"C:/Tools/openssl-1.1.1/openssl.exe\" enc -base64 -d", mydata), intern = TRUE)

[1] "the name of the dog is bruce"

Для полноты, используя библиотеку openssl:

library(openssl)

str_enc <- base64_encode("the name of the dog is bruce")
rawToChar(base64_decode(str_enc))

[1] "the name of the dog is bruce"
person 27 ϕ 9    schedule 18.06.2020