【问题标题】:R Objects do not exist (undefined), but R can retrieve valuesR 对象不存在(未定义),但 R 可以检索值
【发布时间】:2021-04-13 16:01:21
【问题描述】:

我在尝试使用 ddply 生成表时遇到问题:

ddply(Data, .(Data$Condition), summarise, n = length(Data$Condition), 
      mean = mean(Data$Composite), std = sd(Data$Composite), var = var(Data$Composite))

出现以下错误:

Error in `[.data.frame`(col, i) : undefined columns selected

但是,我试图在 ddply 中使用的 df 中的列已明确定义。我也在 R 中对此进行了测试,显然是 R:

  • 可以检索它们的值
  • 了解他们的数据类
  • Data$Condition 显然是一个对象,Data$Composite 不是一个对象
  • 根据exists(),两列都不存在

请看下面的代码和结果:

数据$条件 [1] 高 中 低 低 高
级别:高低中零

数据$复合 [1] 5.454545 3.545455 5.545455 5.818182 5.272727

data.class(Data$Condition) [1] “因素”

data.class(Data$Composite) [1] “数字”

is.object(数据$条件) [1] 是的

is.object(Data$Composite) [1] 错误

存在(数据$条件) 存在错误(Data$Condition):第一个参数无效

存在(数据$复合) 存在错误(Data$Composite):第一个参数无效

为了让事情变得更奇怪,以下代码可以正常工作:

Data %>%
group_by(Condition) %>%
  summarise_at(vars(Composite), funs(mean(., na.rm=TRUE)))

【问题讨论】:

    标签: r object undefined plyr


    【解决方案1】:

    我无法重现您的问题。我可以使用plyr 1.8.6 版在您的数据上运行您的代码而不会出错。但是,结果可能不是您想要的。对于 Condition 的所有三个值,我得到相同的均值、标准和 var。

    这就是我认为你想要的:

    ddply(Data, "Condition", summarise, n = length(Composite), 
          mean = mean(Composite), std = sd(Composite), var = var(Composite))
    
      Condition n     mean       std        var
    1      HIGH 2 5.363636 0.1285649 0.01652893
    2       LOW 2 5.681818 0.1928473 0.03719008
    3    MEDIUM 1 3.545455        NA         NA
    

    通过始终将Data$Composite 放在对函数的调用中,您始终使用Data$Composite 中的所有值,而不是基于ddply 拆分的列条件的值。

    【讨论】:

    • 感谢您的回答。这是我在 R 中遇到过的最奇怪的错误。就像你提到的,当我导出 df 的那部分并在另一个 df 中运行它时,我也可以毫无问题地使用代码。我使用了您的代码,现在出现以下错误:FUN(X[[i]], ...) 中的错误:找不到对象“HIGH”
    【解决方案2】:

    ddply 不适用于此 df,因为根据 ddply 我的列不存在:(“未定义的列已选择”)。所以我试图解决它,使用另一个函数来创建一个表:

    Data %>%
      select(Condition, Composite) %>%
      group_by(Condition) %>%
      summarise_all(list(mean = mean, sd = sd, var = var), na.rm=TRUE)
    

    这个功能确实有效,尽管使用起来不太直观。这是我在 R 中遇到的最奇怪的错误。

    【讨论】:

      猜你喜欢
      • 2014-09-27
      • 2017-01-30
      • 2017-07-11
      • 1970-01-01
      • 2015-03-28
      • 1970-01-01
      • 1970-01-01
      • 2019-07-08
      • 2022-06-10
      相关资源
      最近更新 更多