我想知道我是否在for循环中创建一个对象 - 即不必初始化它。我试过这个怎么可能在matlab中做到这一点。请参阅以下R代码:
> for (i in 1:nrow(snp.ids)) {
+ snp.fasta[i]<-entrez_fetch(db="protein", id=snp.ids[i,], rettype="xml",retmode="text")
+ snp.seq[i]<-xpathSApply(xmlParse(snp.fasta[i]), "//Seq-data_iupacaa",xmlValue)
+ }
Error in snp.fasta[i] <- entrez_fetch(db = "protein", id = snp.ids[i, :
object 'snp.fasta' not found
它显然找不到snp.fasta - 但你可以从我试图创建snp.fasta的代码中看到。任何人都可以阐明它为什么不在其中创造它。 for循环,如果我不能在for循环中创建它,那么初始化snp.fasta的正确方法是什么。
由于
答案 0 :(得分:2)
一般来说,是的。这将是一个可以接受的循环id向量的方法。只需分配给一个非索引对象。
for (i in 1:nrow(snp.ids)) {
snp.fasta <- entrez_fetch(db="protein", id=snp.ids[i,], rettype="xml",retmode="text")
snp.seq <- xpathSApply(xmlParse(snp.fasta), "//Seq-data_iupacaa",xmlValue)
}
(然后你仍然需要将任何有用的结果分配给一个可索引的对象,或者在循环中构建一个这样的序列或者打印一些结果。就像这个例子一样,它会覆盖snp.seq的所有值。并且只留下最后一个。)
看到id=snp.ids[i,]
有点令人困惑。这意味着snp.ids的维度为2.我希望使用列名或数字:id=snp.ids[i,"id"]
。你应该提供dput(head(snp.ids))
所以我们可以做一些现实的测试,而不是这种半猜测的猜测。
答案 1 :(得分:1)
在R中,子集化也是一个函数,因此为向量中的项目赋值:
a[1] = 123
与
相同"["(a, 1) = 123
此处[
是正常功能。如果未定义a
,则会出错。
答案 2 :(得分:0)
循环之前:
snp.fasta <- NULL