【问题标题】:Why does this lapply inside a within call differ from this variable assignment inside the within call?为什么内部调用中的 this lapply 与内部调用中的这个变量赋值不同?
【发布时间】:2021-03-25 00:12:48
【问题描述】:

考虑:

notBroken<-within(mtcars, {
  gear<-as.factor(gear)
  cyl<-as.factor(cyl)})
str(notBroken)

我们的输出,

> str(notBroken)
'data.frame':   32 obs. of  11 variables:
 $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl : Factor w/ 3 levels "4","6","8": 2 2 1 2 3 2 3 1 1 2 ...
 $ disp: num  160 160 108 258 360 ...
 $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
 $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec: num  16.5 17 18.6 19.4 17 ...
 $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
 $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
 $ gear: Factor w/ 3 levels "3","4","5": 2 2 2 1 1 1 1 2 2 2 ...
 $ carb: num  4 4 1 1 2 1 4 2 2 4 ...

表明cyl 和gear 已成为所需的因子。但是,这个:

broken<-within(mtcars,lapply(list(gear,cyl),as.factor))
str(broken)

不这样做。

> str(broken)
'data.frame':   32 obs. of  11 variables:
 $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
 $ disp: num  160 160 108 258 360 ...
 $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
 $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec: num  16.5 17 18.6 19.4 17 ...
 $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
 $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
 $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
 $ carb: num  4 4 1 1 2 1 4 2 2 4 ...

为什么?

我怀疑这可能与with(mtcars,gear) 显示within 将gear 视为mtcars$gear 而不是mtcars["gear"] 的方式有关,但这不是一个完整的答案。我试图以这种方式做的事情可能吗?

【问题讨论】:

    标签: r with-statement r-factor


    【解决方案1】:

    这是因为lapply() 没有将输出分配给broken 的变量gear 和cyl(例如broken 没有发生变化)。

    broken<-within(mtcars, gear <- unlist(lapply(list(gear), as.factor)))
    str(broken)
    'data.frame':   32 obs. of  11 variables:
     $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
     $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
     $ disp: num  160 160 108 258 360 ...
     $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
     $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
     $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
     $ qsec: num  16.5 17 18.6 19.4 17 ...
     $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
     $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
     $ gear: Factor w/ 3 levels "3","4","5": 2 2 2 1 1 1 1 2 2 2 ...
     $ carb: num  4 4 1 1 2 1 4 2 2 4 ...
    

    对比with:

    x <- with(mtcars, lapply(list(gear, cyl), as.factor))
    str(x)
    List of 2
     $ : Factor w/ 3 levels "3","4","5": 2 2 2 1 1 1 1 2 2 2 ...
     $ : Factor w/ 3 levels "4","6","8": 2 2 1 2 3 2 3 1 1 2 ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多