R:将因子附加到空向量并保留因子值
我将原来的问题转化为这个玩具问题: 我有这个:R:将因子附加到空向量并保留因子值,r,R,我将原来的问题转化为这个玩具问题: 我有这个: x <- c() rep(time_factor[1], 3) [1] [0,1) [0,1) [0,1) Levels: [0,1) [1,15) [15,30) [30,40) [40,60] append不适用于factors的原因是底层函数c没有用于factors的方法。那为什么不自己做呢?下面的方法是一种可能,它似乎适用于您的案例。不确定它是否适用于所有可能需要合并因素的情况 # reproducible example time
x <- c()
rep(time_factor[1], 3)
[1] [0,1) [0,1) [0,1)
Levels: [0,1) [1,15) [15,30) [30,40) [40,60]
append
不适用于factors的原因是底层函数c
没有用于factors
的方法。那为什么不自己做呢?下面的方法是一种可能,它似乎适用于您的案例。不确定它是否适用于所有可能需要合并因素的情况
# reproducible example
time_factor <- cut(.5, c(0,1,15, 30, 40, 60), right=FALSE)
x <- c()
#
# original version
c(time_factor[1], time_factor[1])
# [1] 1 1
append(x, rep(time_factor[1], 3))
# [1] 1 1 1
#
# c method for factors
c.factor <- function(...){
y <- do.call(c, lapply(list(...), as.character))
factor(y, unique(unlist(lapply(list(...), levels))))
}
#
# same as before with c.factor in global environment
c(time_factor[1], time_factor[1])
# [1] [0,1) [0,1)
# Levels: [0,1) [1,15) [15,30) [30,40) [40,60)
append(x, rep(time_factor[1], 3))
# [1] [0,1) [0,1) [0,1)
# Levels: [0,1) [1,15) [15,30) [30,40) [40,60)
#可复制示例
几乎可以肯定的是,您根本不应该使用append
。但是,您可以使用append(x,as.character(rep(time\u factor[1,3]))
。为什么不使用c(x,rep(time\u factor[1,3])
# reproducible example
time_factor <- cut(.5, c(0,1,15, 30, 40, 60), right=FALSE)
x <- c()
#
# original version
c(time_factor[1], time_factor[1])
# [1] 1 1
append(x, rep(time_factor[1], 3))
# [1] 1 1 1
#
# c method for factors
c.factor <- function(...){
y <- do.call(c, lapply(list(...), as.character))
factor(y, unique(unlist(lapply(list(...), levels))))
}
#
# same as before with c.factor in global environment
c(time_factor[1], time_factor[1])
# [1] [0,1) [0,1)
# Levels: [0,1) [1,15) [15,30) [30,40) [40,60)
append(x, rep(time_factor[1], 3))
# [1] [0,1) [0,1) [0,1)
# Levels: [0,1) [1,15) [15,30) [30,40) [40,60)