0

如果您能帮助我解决以下两个问题,我将不胜感激:

  1. 下面的“for”循环忽略了我的第一个循环项。下面的代码是我程序的一小部分。在这里,我正在迭代对象“num”并使用函数“Grep”循环遍历“mySet”,该函数标记了 mySet 中的某些项目。

“for”循环在“num”对象的第一个元素“0”处起作用。因此,它在 mySet 中找不到任何以“0”开头的项目。

num <- c(0,2,4,6,8,10,15,20,30,40,45,50,55,60,65,70,80,85,90,92,94,96,98,100)
mySet <- c("0.C.A", "2.C.A", "4.C.A", "6.C.A", "8.C.A", "10.C.A", "15.C.A", "20.C.A",
           "30.C.A", "40.C.A", "45.C.A", "50.C.A", "55.C.A", "60.C.A", "65.C.A", "70.C.A",
           "80.C.A", "85.C.A", "90.C.A", "92.C.A", "94.C.A", "96.C.A", "98.C.A", "100.C.A")
varLoop <- c()
Grep <- function(num)grep(paste("^" , num, "\\.", sep=""), mySet, value = TRUE)
for(i in num){
    varLoop[i] <- Grep(i)
    print(varLoop[i])}
  1. 如果我按如下方式修改脚本,第二个问题是不完整的输出和警告。警告是:“要替换的项目数不是替换长度的倍数”。不完整的输出不包括任何以字母B结尾的项目

下面的脚本会产生问题:

num <- rep(c(0,2,4,6,8,10,15,20,30,40,45,50,55,60,65,70,80,85,90,92,94,96,98,100), 2)
mySet <- c("0.C.A", "2.C.A", "4.C.A", "6.C.A", "8.C.A", "10.C.A", "15.C.A", "20.C.A",
           "30.C.A", "40.C.A", "45.C.A", "50.C.A", "55.C.A", "60.C.A", "65.C.A", "70.C.A",
           "80.C.A", "85.C.A", "90.C.A", "92.C.A", "94.C.A", "96.C.A", "98.C.A", "100.C.A",
           "0.C.B", "2.C.B", "4.C.B", "6.C.B", "8.C.B", "10.C.B", "15.C.B", "20.C.B",
           "30.C.B", "40.C.B", "45.C.B", "50.C.B", "55.C.B", "60.C.B", "65.C.B", "70.C.B",
           "80.C.B", "85.C.B", "90.C.B", "92.C.B", "94.C.B", "96.C.B", "98.C.B", "100.C.B")
varLoop <- c()
Grep <- function(num)grep(paste("^" , num, "\\.", sep=""), mySet, value = TRUE)
for(i in num){
    varLoop[i] <- Grep(i)
    print(varLoop[i])}

提前谢谢你,拉吉·艾萨克

4

1 回答 1

8

R, 索引从1not开始0

x <- 1:5
x[0] 
## integer(0)

惯用的方法是做类似的事情seq_along,然后num用结果索引。

你在R Hell 的第二个圈子里,你的对象在循环中生长。

我认为在这里,但是有些东西sapply将有助于简化您的代码

sapply(num, Grep)
于 2013-03-12T01:17:19.500 回答