Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:将因子附加到空向量并保留因子值_R - Fatal编程技术网

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)