【问题标题】:For loop ignore my first itemFor循环忽略我的第一项
【发布时间】:2013-03-12 01:09:03
【问题描述】:

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

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

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

【问题讨论】:

标签: r


【解决方案1】:

R 中,索引从1 而非0 开始

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

惯用的方法是执行seq_along 之类的操作,然后用结果索引num

您在the second circle of R Hell 中在循环中增长您的对象。

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

sapply(num, Grep)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 2021-12-19
    相关资源
    最近更新 更多