Проблемы с select.list () - PullRequest
       78

Проблемы с select.list ()

1 голос
/ 29 марта 2020

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

library(dplyr)
library(tcltk)
library(utils)

x<-c(1,2,5)
y<-c(7,2.2,8)
c<-c("red", "yellow", "blue")

df<-as.data.frame(cbind(x,y,c),stringsasfactors=FALSE)

answer<-tk_select.list(df$c, preselect = NULL, multiple = TRUE,
            title = "Select items to keep:")

selected_df<-filter(df, c %in% answer)

selected_df

1 Ответ

1 голос
/ 29 марта 2020

Мы можем создать data.frame как

df <- data.frame(x, y, c, stringsAsFactors = FALSE)

. Таким образом, вывод selected_df равен

selected_df
#  x y   c
#1 1 7 red

ПРИМЕЧАНИЕ: stringsasfactors не равно до stringsAsFactors. Таким образом, столбцы character остаются как factor class

str(as.data.frame(cbind(x,y,c),stringsasfactors=FALSE) )
# 'data.frame': 3 obs. of  3 variables:
#$ x: Factor w/ 3 levels "1","2","5": 1 2 3
#$ y: Factor w/ 3 levels "2.2","7","8": 2 1 3
#$ c: Factor w/ 3 levels "blue","red","yellow": 2 3 1

Кроме того, as.data.frame(cbind будет иметь ненужные проблемы, так как cbind возвращает matrix, а matrix может иметь только один class т.е. все столбцы конвертируются в класс character, поскольку значения в c равны character. Когда мы используем as.data.frame с stringsAsFactors = FALSE, это создает класс character, но столбцы numeric должны оставаться нумерацией c

...