Вставляйте "" вместо NA при добавлении строк в gdf [gWidgets2RGtk2]

Можно ли вставлять "" вместо NA при создании новой строки в gdf?

EDIT: Вот пример кода, который я попробовал

require(gWidgets2RGtk2)
df <- data.frame(x=1:5,y=6:10) #Sample data frame
w2 <- gwindow("keyfile editor")
h <- gdf(df,cont=w2)
addHandlerChanged(h, handler = function(h,...){ #Handler to remove NA
h<<-apply(h[1:nrow(h),1:ncol(h)], 2, function(x) gsub("NA","",x))
})
2 ответа

svalue(h$obj, drop = FALSE)

дает новое значение для обновленной строки. Итак, теоретически,

addHandlerChanged(h, handler = function(h,...) {
 svalue(h$obj, drop = FALSE)[] <- lapply(
 svalue(h$obj, drop = FALSE), 
 function(x) {
 x[is.na(x)] <- ""
 }
 )
}

должен заменить все NA на "". Есть две проблемы:

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

Я думаю, что проблема такова:

methods('svalue<-')
## [1] svalue<-.default* svalue<-.GCheckbox* svalue<-.GFormLayout* svalue<-.GGroup* 
## [5] svalue<-.GHtml* svalue<-.GLabel* svalue<-.GMenuBar* svalue<-.GRadio* 
## [9] svalue<-.GToolBar* svalue<-.GTree*

показывает, что для установки значения s не существует GDf -specific, поэтому будет svalue<-.default.

gWidgets2:::'svalue<-.default' ## function (obj, index=NULL, ..., value) ## { ## if (!isExtant(obj)) { ## return(obj) ## } ## if (getWithDefault(index, FALSE)) ## obj$set_index(value, ...) ## else obj$set_value(value, ...) ## obj ## }

Это вызывает метод set_value объекта.

ls(attr(h, ".xData"))
## [1] "add_cell_popup" "add_popup_to_view_col" "add_to_parent" 
## [4] "add_view_columns" "block" "block_editable_column" 
## [7] "cell_popup_id" "change_signal" "clear_stack" 
## [10] "clear_view_columns" "cmd_coerce_column" "cmd_insert_column" 
## [13] "cmd_remove_column" "cmd_replace_column" "cmd_set_column_name" 
## [16] "cmd_set_column_names" "cmd_stack" "coerce_with" 
## [19] "connected_signals" "default_cell_popup_menu" "default_expand" 
## [22] "default_fill" "default_popup_menu" "freeze_attributes" 
## [25] "get_column_index" "get_column_value" "get_dim" 
## [28] "get_name" "get_view_column" "handler_id" 
## [31] "initFields" "initialize" "initialize#GComponent" 
## [34] "initialize#GWidget" "invoke_change_handler" "invoke_handler" 
## [37] "is_editable" "map_j" "model" 
## [40] "not_deleted" "notify_observers" "parent" 
## [43] "set_editable" "set_frame" "set_name" 
## [46] "set_names" "set_parent" "store" 
## [49] "toolkit" "unblock_editable_column" "widget"

но, похоже, пока ничего не сделано.


Ну, Ричи сделал свою обычную работу. Этот вопрос имеет несколько проблем: один из них вы используете переменную h в качестве глобальной переменной (для объекта gdf) и как аргумент обработчику, поэтому внутри обработчика h не ссылается на объект, а h$obj. Second Для установки значений для выбора в объекте gdf используется метод [<- method (h[i,j] <- "" метод h object set_items). Вы пытались изменить объект, а не вызывать метод на нем. Что касается значений NA, основой для элементов, которые нужно выбрать, является RGtk2DataFrame, который, как и кадр данных в R, будет принуждать значения к символу, если вы попытаетесь поместить значение символа в числовое значение. Лучше всего использовать R, поскольку он предназначен. Если вы действительно хотите избавиться от значений NA, вы можете сделать это, когда будете использовать значения, которые пользователь редактировал, изменяя h[,] по вашему желанию.

Теперь, если вы действительно хотели это сделать, я думаю, вы могли бы на уровне RGtk2, написав соответствующий рендеринг ячеек.

licensed under cc by-sa 3.0 with attribution.