我有以下矩阵“m”(nrow = 2504,ncol = 2),有两列;一个名为ind(来自索引),另一个名为headerline(样本的ID):
> head(m)
ind headerline
[1,] "1" "HG00096"
[2,] "2" "HG00097"
[3,] "3" "HG00099"
[4,] "4" "HG00100"
[5,] "5" "HG00101"
[6,] "6" "HG00102" ...
以下索引向量称为“index”(nr = 385,nc = 1):
> head(index)
V1
1 1
2 4
3 9
4 12
5 13
6 16 ...
我想在索引标记的行位置中对样本进行子集化(我希望在第1行中有样本的新矩阵,第4行中的样本,第9行中的样本等等)。我想出了以下代码:
for i in index { dudosos<-subset(headerline,ind==i, select=c(headerline)) }
但会产生以下错误:
错误:“for i”中的意外符号
我不知道那个错误告诉我的是什么,它太模糊了。救命?谢谢!
期望的输出:
> head(m) #or other name
ind headerline
"1" "HG00096"
"4" "HG00100"
"9" ...
答案 0 :(得分:2)
没有举例说明你想要归还的内容,即我猜你所追求的是什么。我会说你有兴趣在不需要for循环的情况下查看%in%
运算符。
使用您的示例数据:
library(data.table)
m <- data.table(id = c("1", "2", "3", "4", "5", "6", "7", "8", "9"), headerline = c("HG00096", "HG00097", "HG00099", "HG00100", "HG00101", "HG00102","HG00103", "HG00104", "HG00105"))
index <- c("1", "4", "9")
output <- m[id %in% index,]
输出如下所示:
> output
id headerline
1: 1 HG00096
2: 4 HG00100
3: 9 HG00103
所以我们返回了一个新的数据表output
,其中包含m
中id列和索引向量共有的行。
这是你追求的吗?
答案 1 :(得分:1)
你可以在基地完成所有这些:
for (i in index){ ... }
这个或@ Gin_Salmon的答案是实现目标的最佳方式......
您的代码存在一些问题:
1.你的for循环交互需要在()中:subset(as.data.frame(m), ind == i, select = headerline)
2.您的子集命令应为:dudosos
3.你的循环在每次迭代时覆盖dudosos[i, ] <- subset(m, ind == i, select = headerline)
m <- matrix(c("1", "2", "3", "4", "5", "6", "7", "8", "9",
"HG00096", "HG00097", "HG00098", "HG00099", "HG00100", "HG00101","HG00102", "HG00103", "HG00103"), ncol=2)
index <- data.frame(V1= c("1", "4", "9"))
colnames(m) <- c("ind","headerline")
dudosos <- data.frame()
for (i in index$V1) {
dudosos <- rbind(dudosos, subset(x = as.data.frame(m) ,
subset = ind == i, select=headerline))
}
$headers = $message->getHeaders();
$headers->addTextHeader('AccountId', $accountId);
再一次,其他解决方案要好得多,但有时它也有助于了解您最初编写的代码无法正常工作的原因。