r - ave 和未表示的交互结果 (drop=FALSE) - 导致错误

标签 r interaction

采用这个简单的向量x和两个分组变量g1g2

x <- 1:10
g1 <- rep(1:2, each=5)
g2 <- rep(1:3, c(2,3,5))

这些变量的交互作用中有许多组未在此当前数据中表示。

table(interaction(g1,g2))
#1.1 2.1 1.2 2.2 1.3 2.3 
#  2   0   3   0   0   5

这会导致罕见的错误,这些错误本质上可以归结为简单的错误,例如:

ave(x, list(g1,g2), FUN=function(x) if(length(x)==0) stop() else length(x) )
#Error in FUN(X[[i]], ...) : 

现在,我看不出为什么会出现这种情况,因为 ave 的结果应该始终与 x 的长度相同,并且具有未表示的交互组被丢弃。 这是对 ave 的简单修复,例如:

ave2 <- function (x, ..., FUN = mean) 
{
    if (missing(...)) 
        x[] <- FUN(x)
    else {
        # the only real edit is the following line
        g <- interaction(..., drop=TRUE)
        split(x, g) <- lapply(split(x, g), FUN)
    }
    x
}

...然后给出适当的结果。

ave2(x, list(g1,g2), FUN=function(x) if(length(x)==0) stop() else length(x) )
#[1] 2 2 3 3 3 5 5 5 5 5

我想在我向错误跟踪器提出以下建议之前,我是否忽略了一些简单的事情,例如为什么 ave 不应该添加 drop=TRUE

所以问题是,是否存在 ave 需要了解未表示的交互的情况?

最佳答案

ave 不是问题,而是 stop 没有设计为返回长度为 0 的项目。请尝试以下操作:

 ave(x, list(g1,g2), FUN=function(x) if(length(x)==0) {vector("numeric",0) 
                                                       }else length(x) )

 [1] 2 2 3 3 3 5 5 5 5 5

关于r - ave 和未表示的交互结果 (drop=FALSE) - 导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36348329/

相关文章:

r - 在 mutate() 中为列函数使用变量

r - 对于数据框中的每一行,根据日期范围创建多行

erlang - 角色模型和碰撞检测

c# - javascript(桌面应用程序)和 C# 之间的交互

r - 找不到Hadoop输入路径

r - 同一表内重叠日期时间的数量(R)

r - 将参数作为 (1) 字符串向量和 (2) 变量名提供给 data.table

Bash 脚本似乎按了不需要的返回键

windows-phone-7 - 互动触发器不会触发属性更改事件

r - 如何使用 ggplot 以及 method = glmmTMB::glmmTMB 和点权重来可视化交互效果