2013-03-12 29 views
0

我會感激,如果你能幫助我有以下兩個問題:For循環無視我的第一個項目

  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])} 

謝謝你在前進, Ragy艾薩克

+0

索引開始從1,不是0 http://stackoverflow.com/questions/3135325/why-do-vector-indices-in -r-start-with-1-instead-of 0 – mnel 2013-03-12 01:11:57

+0

...這意味着當'varLoop [0] < - Grep(0)'運行時,結果將不會被存儲。 – 2013-03-12 02:05:12

回答

8

R ,索引編制從1而不是0

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

慣用方法是做類似seq_along的事情,然後用num作爲結果。

您正在the second circle of R Hell在循環中增長對象。

我想在這裏,但是一些sapply將有助於簡化代碼

sapply(num, Grep) 
+0

非常感謝 – 2013-03-12 09:42:33

相關問題