2012-05-06 2 views
7

Как я могу перечислить все результаты, которые имели место при вводе packageName<tab>, т. Е. Полный список, предлагаемый через автозаполнение? В R 2.15.0, я получаю следующее за Matrix::<tab>:R: Как отключить усечение списка функций пакета?

> library(Matrix) 
> Matrix:: 
Matrix::.__C__abIndex    Matrix::.__C__atomicVector   Matrix::.__C__BunchKaufman   Matrix::.__C__CHMfactor    Matrix::.__C__CHMsimpl    
Matrix::.__C__CHMsuper    Matrix::.__C__Cholesky    Matrix::.__C__CholeskyFactorization Matrix::.__C__compMatrix   Matrix::.__C__corMatrix    
Matrix::.__C__CsparseMatrix   Matrix::.__C__dCHMsimpl    Matrix::.__C__dCHMsuper    Matrix::.__C__ddenseMatrix   Matrix::.__C__ddiMatrix    
Matrix::.__C__denseLU    Matrix::.__C__denseMatrix   Matrix::.__C__dgCMatrix    Matrix::.__C__dgeMatrix    Matrix::.__C__dgRMatrix    
Matrix::.__C__dgTMatrix    Matrix::.__C__diagonalMatrix  Matrix::.__C__dMatrix    Matrix::.__C__dpoMatrix    Matrix::.__C__dppMatrix    
Matrix::.__C__dsCMatrix    Matrix::.__C__dsparseMatrix   Matrix::.__C__dsparseVector   Matrix::.__C__dspMatrix    Matrix::.__C__dsRMatrix    
Matrix::.__C__dsTMatrix    Matrix::.__C__dsyMatrix    Matrix::.__C__dtCMatrix    Matrix::.__C__dtpMatrix    Matrix::.__C__dtrMatrix    
Matrix::.__C__dtRMatrix    Matrix::.__C__dtTMatrix    Matrix::.__C__generalMatrix   Matrix::.__C__iMatrix    Matrix::.__C__index     
Matrix::.__C__isparseVector   Matrix::.__C__ldenseMatrix   Matrix::.__C__ldiMatrix    Matrix::.__C__lgCMatrix    Matrix::.__C__lgeMatrix    
Matrix::.__C__lgRMatrix    Matrix::.__C__lgTMatrix    Matrix::.__C__lMatrix    Matrix::.__C__lsCMatrix    Matrix::.__C__lsparseMatrix   

[...truncated] 

Это [...truncated] сообщение раздражает, и я хочу, чтобы произвести полный список. Какую опцию/флаг/ручку/конфигурацию/заклинание мне нужно вызвать, чтобы избежать усечения? У меня сложилось такое впечатление, что я видел полный список, но не более того - возможно, это была другая ОС (например, Linux).

Я знаю, что ls("package:Matrix") - один из полезных подходов, но это не то же самое, что установка параметра, а список отличается.

ответ

9

К сожалению, в Windows это похоже на то, что это поведение связано с кодом C, который используется для создания консоли. Таким образом, ответ кажется, что «нет, вы не можете его отключить» (по крайней мере, не изменяя источники, а затем перекомпилируя R с нуля).

Вот соответствующие строки из $RHOME/src/gnuwin32/console.c:

909 static void performCompletion(control c) 
910 { 
911 ConsoleData p = getdata(c); 
912 int i, alen, alen2, max_show = 10, cursor_position = p->c - prompt_wid; 
    ... 
    ... 
1001  if (alen > max_show) 
1002  consolewrites(c, "\n[...truncated]\n"); 

Вы правы, что на некоторых других платформах, все результаты являются распечатаны. (Например, я часто использую Emacs, и он выводит все результаты заполнения вкладки в отдельный буфер).

Как интересное примечание стороны, rcompgen, бэкенд, который фактически выполняет табуляцию завершение (в отличие от результатов печати на консоль) не всегда найти все доработки. Просто Windows не распечатывает их для нас.

Вы можете проверить, что это происходит даже на Windows, выполнив:

library(Matrix) 
Matrix:: 
## Then type <TAB> <TAB> 
## Then type <RET> 
rc.status()  ## Careful not to use tab-completion to complete rc.status ! 
matches <- rc.status()$comps 
length(matches) # -> 288 
matches   # -> lots of symbols starting with 'Matrix::' 

Для получения более подробной информации о о внутреннем интерфейсе, а также функции и опции, которые контролируют свое поведение, см ?rcompgen.

+0

Я продаю, что это правильный ответ. Я подозреваю, что я привык к автоматическому полному поведению в Linux, и что ничего не изменилось в Windows. Я надеюсь, что решение R для Windows UI не распространяется на R на других платформах. Ваше понимание других компонентов фантастично, спасибо! – Iterator

Смежные вопросы