R выбрать строку фрейма данных в интерактивном режиме

У меня есть кадр данных, скажем:

df <- data.frame(a=1:10,b=runif(10))

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

Что-то вроде edit(df), за исключением того, что то, что я хочу, намного проще, поскольку мне не нужны функции редактирования --- мне просто нужно прослушивать событие щелчка в одной из строк и получать индекс для этой строки (я не даже не нужна конкретная ячейка!)

Кто-нибудь знает, как я могу это сделать? Я бы предпочел сделать это с базой R или grid (ради того, чтобы не добавлять много пакетов) - может быть, я могу как-то нарисовать фрейм данных на сетке с масштабом y, определенным от 1 до nrow(df), и использовать grid.locator() функция?

Было бы неплохо не использовать пакеты графического интерфейса, но если я это сделаю, он должен быть кроссплатформенным (linux/windows). gwidgets довольно приятный (хотя у них, кажется, нет хорошо интегрированного события щелчка с их виджетом gdf).

ваше здоровье.


person mathematical.coffee    schedule 07.02.2012    source источник
comment
Если вы используете gWidgets, попробуйте gtable, а не gdf, так как щелчки мыши также запускают редактирование. Метод svalue для gtable с index=TRUE вернет индекс выбранной строки. В противном случае вы могли бы сделать это с помощью графического устройства, но без полос прокрутки вам придется ограничить размер отображаемого фрейма данных.   -  person jverzani    schedule 07.02.2012


Ответы (2)


ну, вот быстрый способ, никаких дополнительных пакетов, но вам, возможно, придется возиться с форматированием, если вы хотите, чтобы таблица была красиво выровнена, округлена и т. д.:

    df <- data.frame(a=1:10,b=runif(10))
    df[menu(apply(df,1,paste,collapse="  "),graphics=TRUE),]

При необходимости устройство расширяется, и при необходимости автоматически появляются полосы прокрутки.

person tim riffe    schedule 07.02.2012
comment
То, о чем он просил, было просто: menu(apply(df,1,paste,collapse=" "),graphics=TRUE) - person IRTFM; 07.02.2012
comment
ой, я думал, что ему нужна строка, а не индекс строки - person tim riffe; 07.02.2012
comment
И, прочитав это снова, я думаю, что ваш ответ столь же правдоподобен. - person IRTFM; 07.02.2012
comment
Вау, это именно то, что я хочу. Я только недавно узнал о menu и забыл о графическом варианте. Спасибо! (Я только попросил индекс строки, чтобы я мог использовать его для получения строки - так что либо это нормально). Спасибо! - person mathematical.coffee; 08.02.2012

Я собирался предложить комбинацию пустого графика, заполненного addtable2plot, а затем использовать locator, чтобы выбрать точку и вычислить строку с комбинацией спецификации y и cellheight <- max(strheight(c(column.names, row.names, as.vector(unlist(table))),... но усилия в этом направлении кажутся глупыми, поскольку @timrifle кажется попал в самую точку.

person IRTFM    schedule 07.02.2012