select.list() 的问题

Troubles with select.list()

我试图生成一个对话框,用户可以在其中保留 select 个元素,但是我想保留的项目是一个字符,但看起来 R 正在根据它们的字母顺序为它们提供数值秩。这是一个示例(我希望对话框中的列表为 1:Red、2:Yellow、3: Blue 而不是它给我 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

我们可以将 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 returns 一个 matrixmatrix 只能有一个 class即所有列都转换为 character class,因为 'c' 中的值是 character。当我们将 as.data.framestringsAsFactors = FALSE 一起使用时,它会创建 character class 但 numeric 列应保持为数字