我正在尝试将矩阵切割为特定行。最好通过以下输出解释这个问题:
Browse[2]> structure[which(structure$atom == "CA"),]
recordName serial atom
1: ATOM 2 CA
2: ATOM 10 CA
3: ATOM 18 CA
4: ATOM 24 CA
5: ATOM 31 CA
---
572: ATOM 4353 CA
573: ATOM 4358 CA
574: ATOM 4368 CA
575: ATOM 4377 CA
576: ATOM 4389 CA
Browse[2]> structure[which(structure$atom == atom),]
recordName serial atom
1: ATOM 1 N
2: ATOM 2 CA
3: ATOM 3 C
4: ATOM 4 O
5: ATOM 5 CB
---
4392: ATOM 4394 ND1
4393: ATOM 4395 CD2
4394: ATOM 4396 CE1
4395: ATOM 4397 NE2
4396: ATOM 4398 OXT
Browse[2]> atom
[1] "CA"
我的问题是,为什么当我输入 atom 而不是 CA 时,我会对行进行不同的选择。如您所见,变量本身等于“CA”。
感谢您的帮助!
答案 0 :(得分:3)
data.table
首先评估表格环境中的名称,即列。
示例:
> x <- data.table(a=1:5, b=11:15)
> x[a==1]
a b
1: 1 11
> a <- 1
> x[x$a==a]
a b
1: 1 11
2: 2 12
3: 3 13
4: 4 14
5: 5 15
正如MrFlick所说,最后一个陈述相当于x[a==a]
。这两个a
都是x
中的列。
请注意,which
对此操作不是必需的,也不是有用的;对于data.table
,选择行不需要尾随,
。
答案 1 :(得分:1)
@matthewlundberg为您提供了正确的解释,至于解决方法,请使用get()
:
structure[which(structure$atom == get("atom", envir=globalenv())),]
在旁注中,语句中有许多多余的语法。即,不需要which
,并且不需要在i=
参数内引用数据表本身,也不需要结束逗号
即使用
structure[atom == get("atom", envir=globalenv())) ]