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 一个 matrix
和 matrix
只能有一个 class
即所有列都转换为 character
class,因为 'c' 中的值是 character
。当我们将 as.data.frame
与 stringsAsFactors = FALSE
一起使用时,它会创建 character
class 但 numeric
列应保持为数字
我试图生成一个对话框,用户可以在其中保留 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 一个 matrix
和 matrix
只能有一个 class
即所有列都转换为 character
class,因为 'c' 中的值是 character
。当我们将 as.data.frame
与 stringsAsFactors = FALSE
一起使用时,它会创建 character
class 但 numeric
列应保持为数字