在 R shell 中按顺序显示函数参数

Showing function arguments in order in an R shell

当我从终端打开 R 时,我可以使用 Tab 键自动完成函数和对象。通过在函数和 ( 之后按 Tab 键,将列出函数参数。但是,在 Ubuntu 中,这些参数似乎是根据它们的声明方式排序的;在 macos 中,它们按字母顺序排列。

在MacOs下:

> findInterval(
all.inside=        left.open=         rightmost.closed=  vec=               x= 

在Ubuntu下:

> findInterval(
x=                 vec=               rightmost.closed=  all.inside=        left.open=

我想在我的 Mac 上有 Ubuntu 行为。我从终端通过 man readline 查看了 readline 选项(不确定是否相关),但找不到任何有用的东西。

要求

  • 在 macOS 下通过终端打开 R
  • 自动完成功能根据声明的顺序对函数参数进行排序

如您所见,R 在安装 R-4.0.4.pkg 时按字母顺序排列参数。但是,当 R 与 Homebrew 一起安装时,它们会按预期顺序显示。

因此,一种可能的解决方案是卸载 R 并通过 Homebrew 安装它。

卸载 R

rm /usr/local/bin/{R,RScript}
sudo rm -r /Applications/R.app
sudo rm -r /Library/Frameworks/R.framework
sudo pkgutil --regexp --forget 'org\.R-project*' 

通过 Homebrew 安装 R

brew install R

对我来说,它显示了某些目录如 /usr/local/share/info 对我的用户不可写的错误。 copy/paste brew 推荐的,比如我是:

sudo chown -R $(whoami) /usr/local/lib/pkgconfig /usr/local/share/info /usr/local/share/man/man3 /usr/local/share/man/man5

然后重复命令:

brew install R

这次成功了,它还安装了所有依赖项,如 openblas、readline、openssl@1.1 等。

现在当你启动 R 时,它会显示一系列警告,如 Setting LC_COLLATE failed。假设您使用的是 zsh,创建或编辑 ~/.zshrc 并添加行

export LC_ALL=en_US.UTF-8

测试

现在打开一个新终端 window 并输入 R。如果您使用自动完成 findInterval( 您将看到预期的行为,请参见屏幕截图:

为什么两个安装不同?

您可以查看 brew 与 R-4.0.4.pkg 变体的配置。对于 brew,您可以在 /usr/local/Cellar/r/4.0.4_2/lib/R/etc/Makeconf 中找到它,它看起来像这样:

configure  '--prefix=/usr/local/Cellar/r/4.0.4_2' '--enable-memory-profiling' '--without-cairo' '--without-x' '--with-tcl-config=/usr/local/opt/tcl-tk/lib/tclConfig.sh' '--with-tk-config=/usr/local/opt/tcl-tk/lib/tkConfig.sh' '--with-aqua' '--with-blas=-L/usr/local/opt/openblas/lib -lopenblas' '--enable-R-shlib' '--disable-java' 'PKG_CONFIG_PATH=/usr/local/opt/gmp/lib/pkgconfig:/usr/local/opt/isl/lib/pkgconfig:/usr/local/opt/mpfr/lib/pkgconfig:/usr/local/opt/jpeg/lib/pkgconfig:/usr/local/opt/libpng/lib/pkgconfig:/usr/local/opt/openblas/lib/pkgconfig:/usr/local/opt/pcre2/lib/pkgconfig:/usr/local/opt/readline/lib/pkgconfig:/usr/local/opt/openssl@1.1/lib/pkgconfig:/usr/local/opt/tcl-tk/lib/pkgconfig:/usr/local/opt/xz/lib/pkgconfig' 'PKG_CONFIG_LIBDIR=/usr/lib/pkgconfig:/usr/local/Homebrew/Library/Homebrew/os/mac/pkgconfig/10.15' 'CC=clang' 'CFLAGS=-Wno-implicit-function-declaration' 'LDFLAGS=-L/usr/local/opt/gettext/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/xz/lib' 'CPPFLAGS=-I/usr/local/opt/gettext/include -I/usr/local/opt/readline/include -I/usr/local/opt/xz/include' 'CXX=clang++' 'OBJC=clang'

对于 Framework R-4.0.4.pkg 变体,您可以在文件 /Library/Frameworks/R.framework/Resources/etc/Makeconf:

中找到相关信息
configure  'CC=clang -mmacosx-version-min=10.13' 'CXX=clang++ -mmacosx-version-min=10.13' 'OBJC=clang -mmacosx-version-min=10.13' 'FC=gfortran -mmacosx-version-min=10.13' 'F77=gfortran -mmacosx-version-min=10.13' 'CFLAGS=-Wall -g -O2' 'CXXFLAGS=-Wall -g -O2' 'OBJCFLAGS=-Wall -g -O2' 'FCFLAGS=-Wall -g -O2' 'F77FLAGS=-Wall -g -O2' '--enable-memory-profiling' '--x-libraries=/opt/X11/lib' '--x-includes=/opt/X11/include' '--enable-R-framework' '--build=x86_64-apple-darwin17.0' 'build_alias=x86_64-apple-darwin17.0' 'PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/local/lib/pkgconfig:/opt/X11/lib/pkgconfig'

注意 brew 变体中 readline 和 gettext 的 CPPFLAGS 和 LDFLAGS。

测试:将 CPPFLAGS/LDFLAGS 添加到 R-4.0。4.pkg 变体

只是为了证实需要这些 compile/link 标志的理论,R 是从此处的源代码构建的。

首先,如果系统中不存在某些依赖项,则需要这些依赖项。

Xcode
XQuartz-2.8.0.dmg from https://www.xquartz.org

brew install gfortran
brew install xz
brew install cairo
brew install pcre2
brew install libtiff libjpeg

从其中一个镜像下载源代码 R-4.0。4.tar.gz。

修改后的配置命令现在看起来像这样:

./configure  'CC=clang -mmacosx-version-min=10.13' 'CXX=clang++ -mmacosx-version-min=10.13' 'OBJC=clang -mmacosx-version-min=10.13' 'FC=gfortran -mmacosx-version-min=10.13' 'F77=gfortran -mmacosx-version-min=10.13' 'CFLAGS=-Wall -g -O2' 'CXXFLAGS=-Wall -g -O2' 'OBJCFLAGS=-Wall -g -O2' 'FCFLAGS=-Wall -g -O2' 'F77FLAGS=-Wall -g -O2' '--enable-memory-profiling' '--x-libraries=/opt/X11/lib' '--x-includes=/opt/X11/include' '--enable-R-framework' '--build=x86_64-apple-darwin17.0' 'build_alias=x86_64-apple-darwin17.0' 'PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/local/lib/pkgconfig:/opt/X11/lib/pkgconfig' 'CPPFLAGS=-I/usr/local/opt/gettext/include -I/usr/local/opt/readline/include -I/usr/local/opt/xz/include' 'LDFLAGS=-L/usr/local/opt/gettext/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/xz/lib' 'CFLAGS=-Wno-implicit-function-declaration'

之后可以调用

make

确保在执行最后一步之前已创建备份。最后用这个命令

sudo make install

有人会创建或覆盖 /Library/Frameworks/R.framework。调用 /Library/Frameworks/R.framework/Resources/bin/R 现在显示有关自动完成函数参数的预期行为,并且还提供预期的功能。