例如,假设您正在计算80个残基肽中的所有相同残基,其中当残基出现在另一个肽中的相同位置时发生匹配。但问题是,水平的数量可能不一样,因为代表肽的一些字母[A-Z]将存在于一个肽中但不存在于下一个肽中。为简单起见,假设我们在所有三个肽中寻找完全相同的残基(字母在这些相同的位置匹配),因此答案是BOOLEAN TRUE或FALSE语句,其中TRUE如果它们都匹配则为FALSE,如果它们是不符合。同样,问题是因素的数量不同,因此您无法测试peptide_x == peptide_y。
编码:
> peptide_x <- as.factor(sample(LETTERS[1:26], replace = TRUE, 80))
> peptide_y <- as.factor(sample(LETTERS[1:26], replace = TRUE, 80))
> peptide_z <- as.factor(sample(LETTERS[1:26], replace = TRUE, 80))
您可以使用以下命令检查肽中缺少26个残基字母表中的哪些字母:
> setdiff(LETTERS[1:26], peptide_x)
[1]&#34; Y&#34;
所以我们看到&#34; Y&#34; (酪氨酸)缺失。当您创建随机肽时,您可能会遗漏另一个或两个字母,并且可以对任何肽进行此操作。
如果我尝试比较具有相同等级的因素,则可行:
> x <- c("M", "N", "A", "Q", "C")
> y <- c("N", "M", "A", "C", "Q")
> xy_frame <- data.frame(x,y)
> xy_frame
> x == y
[1]错误,错误,错误 正如你所看到的,A的匹配,所以第三个元素&#34; A&#34;是唯一的事实。
令人震惊的是,这项测试有效:
> x <- c("A", "A", "B", "Q", "C")
> y <- c("A", "Q", "C", "D", "R")
> x == y
[1] TRUE FALSE FALSE FALSE FALSE
即使因素的数量不一样。所以我想知道我的数据类型是否有问题,这就是我无法测试的原因:
> peptides <- data.frame(peptide_x, peptide_y)
> peptides$peptide_x == peptides$peptide_y
Ops.factor中的错误(多肽$ peptide_x,多肽$ peptide_y): 等级因子是不同的
那么,如果出现问题,我该如何修复我的数据类型,或者我是否正在运行正确的测试?
我只想对非相同因子水平计算为真 - 假。
评论:
%in%无法正常工作,因为......
头(peptide_x) [1]&#34; C&#34; &#34; T&#34; &#34; X&#34; &#34; Z&#34; &#34; M&#34; &#34; A&#34;
头(peptide_y) [1]&#34; R&#34; &#34; G&#34; &#34; T&#34; &#34; U&#34; &#34; G&#34; &#34; U&#34;
头部(肽%x%in%peptide_y) [1] TRUE TRUE TRUE TRUE TRUE TRUE是
例如,每个肽的前6个字母不匹配,但它表示正确!怎么样?
答案 0 :(得分:2)
使所有级别都存在,即使它们不存在
x <- factor(sample(LETTERS[1:26], replace = TRUE, 80), levels = LETTERS)
y <- factor(sample(LETTERS[1:26], replace = TRUE, 80), levels = LETTERS)
z <- factor(sample(LETTERS[1:26], replace = TRUE, 80), levels = LETTERS)
注意我如何设置每个向量中的levels
相同,即使有些不存在也没关系
> x==y
[1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[14] FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
[27] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[40] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[53] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[66] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
[79] FALSE FALSE
> x==z
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[14] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[27] FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
[40] FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
[53] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[66] FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[79] FALSE FALSE
> y==z
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE TRUE FALSE
[14] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
[27] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[40] FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
[53] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[66] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[79] FALSE FALSE
或者,您可以将它们转换为字符并进行比较
答案 1 :(得分:1)
参考此代码:
x <- c("A", "A", "B", "Q", "C")
y <- c("A", "Q", "C", "D", "R")
R> x == y
[1] TRUE FALSE FALSE FALSE FALSE
这是有效的,因为您正在将字符向量x
与字符向量y
进行比较。我会跳过这些因素,并使用%in%
运算符进行类似的测试:
R> peptide_x <- sample(LETTERS[1:26], replace = TRUE, 80)
R> peptide_y <- sample(LETTERS[1:26], replace = TRUE, 80)
R> peptide_x %in% peptide_y
[1] TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE
[20] TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE
[39] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[58] TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE
[77] TRUE TRUE TRUE FALSE