Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.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_Function - Fatal编程技术网

R:检查完整设计的功能

R:检查完整设计的功能,r,function,R,Function,我想创建一个函数,它接受1到10个向量,并返回Yes或No,这意味着我的所有向量都代表一个完整的设计 下面是一个我称之为完整设计的示例: a如果我理解正确,您可能能够以某种方式使用交互作为确定数据是否完整的第一个切入点 看看你的例子,似乎每个向量中的所有唯一级别都应该有一个唯一的组合,而不是2,而不是0。因此,对于您显示的第一组: > all(table(interaction(a, b, c)) == 1) [1] TRUE 对于另外两个例子,如果你做同样的事情,结果会是错误的 另一种

我想创建一个函数,它接受1到10个向量,并返回Yes或No,这意味着我的所有向量都代表一个完整的设计

下面是一个我称之为完整设计的示例:


a如果我理解正确,您可能能够以某种方式使用交互作为确定数据是否完整的第一个切入点

看看你的例子,似乎每个向量中的所有唯一级别都应该有一个唯一的组合,而不是2,而不是0。因此,对于您显示的第一组:

> all(table(interaction(a, b, c)) == 1)
[1] TRUE
对于另外两个例子,如果你做同样的事情,结果会是错误的

另一种选择是假设我们可以将变量a视为分组变量,并将所有向量放入data.frame中,如下所示:

df1 <- data.frame(a = c(1,1,1,1,2,2,2,2,3,3,3,3),
                  b = c(1,2,1,2,1,2,1,2,1,2,1,2),
                  c = c(1,1,2,2,1,1,2,2,1,1,2,2))
然后,我们可以编写一个小函数来检查分割的每个部分是否相等。我们将进行一些欺骗并使用merge,但必须有更可靠的方法来实现这一点。其思想是,如果我们对相同的输入使用merge,那么它应该只得到一个与所有输入data.frames相同的data.frames

这里有一个不太健壮的未经广泛测试的函数,可以作为起点

myFun <- function(myList) {
  all.equal(Reduce(function(x, y) 
    merge(x, y, all = TRUE, sort = FALSE), myList),
            myList[[1]], check.attributes = FALSE)
}

如果我理解正确,您可能能够以某种方式使用交互作为确定数据是否完整的第一个切入点

看看你的例子,似乎每个向量中的所有唯一级别都应该有一个唯一的组合,而不是2,而不是0。因此,对于您显示的第一组:

> all(table(interaction(a, b, c)) == 1)
[1] TRUE
对于另外两个例子,如果你做同样的事情,结果会是错误的

另一种选择是假设我们可以将变量a视为分组变量,并将所有向量放入data.frame中,如下所示:

df1 <- data.frame(a = c(1,1,1,1,2,2,2,2,3,3,3,3),
                  b = c(1,2,1,2,1,2,1,2,1,2,1,2),
                  c = c(1,1,2,2,1,1,2,2,1,1,2,2))
然后,我们可以编写一个小函数来检查分割的每个部分是否相等。我们将进行一些欺骗并使用merge,但必须有更可靠的方法来实现这一点。其思想是,如果我们对相同的输入使用merge,那么它应该只得到一个与所有输入data.frames相同的data.frames

这里有一个不太健壮的未经广泛测试的函数,可以作为起点

myFun <- function(myList) {
  all.equal(Reduce(function(x, y) 
    merge(x, y, all = TRUE, sort = FALSE), myList),
            myList[[1]], check.attributes = FALSE)
}

使用plyr的id函数有一个非常简单的方法:

library(plyr)
a <- c(1,1,1,1,2,2,2,2,3,3,3,3)
b <- c(1,2,1,2,1,2,1,2,1,2,1,2)
c <- c(1,1,2,2,1,1,2,2,1,1,2,2)

ids <- id(data.frame(a, b, c))
attr(ids, "n") == length(unique(ids))
# [1] TRUE

d <- c(1,1,2,2,1,1,2,2,1,1,2,3)
ids <- id(data.frame(a, b, d))
attr(ids, "n") == length(unique(ids))
# [1] FALSE

id的工作原理是为输入中的每一行分配一个唯一的id,这样就为所有可能的组合留出了空间。输出包含一个属性n,它给出了可能的组合总数。

使用plyr的id函数有一种非常简单的方法:

library(plyr)
a <- c(1,1,1,1,2,2,2,2,3,3,3,3)
b <- c(1,2,1,2,1,2,1,2,1,2,1,2)
c <- c(1,1,2,2,1,1,2,2,1,1,2,2)

ids <- id(data.frame(a, b, c))
attr(ids, "n") == length(unique(ids))
# [1] TRUE

d <- c(1,1,2,2,1,1,2,2,1,1,2,3)
ids <- id(data.frame(a, b, d))
attr(ids, "n") == length(unique(ids))
# [1] FALSE

id的工作原理是为输入中的每一行分配一个唯一的id,这样就为所有可能的组合留出了空间。输出包含一个属性n,该属性给出了可能的组合总数。

对不起,但是levelsfactora==c1,2,3在所有a、b和c中是怎样的?你说的a和b匹配是什么意思,而不是c和a或b的匹配?什么是匹配?当然,我的例子中的所有向量a,b,c都没有相同数量的级别。我刚刚写了一个向量的水平的例子。但我现在删除了它。当我说a和b匹配时,我的意思是如果你删除向量c,a和b,就可以得到一个完整的设计。这意味着,对于c,其他向量的级别数并不等于c的每个级别。在不完全设计的示例1中:c有3个级别,分别为1、2和3。对于c的5级,只有向量的2级和3级。因为它在向量a中缺少了1,在向量c中的位置号是5。现在它更容易理解了吗?!不是真的。我不知道你的意思是什么:对于c的每一层,其他向量的层数是不相等的。在例1中,c的5级是什么?您可能想看看这个包。它包含用于生成和评估实验设计的函数。对不起,levelsfactora==c1,2,3在所有a、b和c中是如何实现的?你说的a和b匹配是什么意思,而不是c和a或b的匹配?什么是匹配?当然,我的例子中的所有向量a,b,c都没有相同数量的级别。我刚刚写了一个向量的水平的例子。但我现在删除了它。当我说a和b匹配时,我的意思是如果你删除向量c,a和b,就可以得到一个完整的设计。这意味着,对于c,其他向量的级别数并不等于c的每个级别。在不完全设计的示例1中:c有3个级别,分别为1、2和3。对于c的5级,只有向量的2级和3级。因为它在向量a中缺少了1,在向量c中的位置号是5。现在它更容易理解了吗?!不是真的。我不知道你的意思是什么:对于c的每一层,其他向量的层数是不相等的。在例1中,c的5级是什么?您可能想看看这个包。它包含生成和评估实验设计的函数。直到现在才知道plyr中的id功能。+1。不知道中的id函数 直到现在。