【问题标题】:For loop - How to overcome replacement has length zero problem in R?For 循环 - 如何克服 R 中长度为零的替换问题?
【发布时间】:2019-05-17 18:58:54
【问题描述】:

我得到替换在 for 循环结束时长度为零的问题。好的,我知道这个错误表示 NULL 或长度为 0 的向量。我尝试了一些解决方案,但没有一个有效。如何摆脱 na/0 结果并继续循环?

for(i in 1:nrow(df)){
  df[i,3] <- ... #that doesn't matter
  if(length(df[i,3] == 0)){
    df[i,3] <- "Not found"
  }
}

Error in x[[jj]][iseq] <- vjj : replacement has length zero

for(i in 1:nrow(df)){
  df[i,3] <- ... #that doesn't matter
  if(is.na(df[i,3] == TRUE){
    df[i,3] <- "Not found"
  }
}

Error in x[[jj]][iseq] <- vjj : replacement has length zero

提前致谢。

编辑:示例:

column1      column2          column3
   a      www.example.com/a     100
   b      www.example.com/b     150
   c      www.example.com/c     NA
   d      www.example.com/d     NA

等等...我的目标是跳过它找不到的链接(c)并保持循环运行。

【问题讨论】:

  • 尝试使用sum 而不是length。在您的逻辑表达式中,length 没有返回逻辑向量 length(1 == 1) 我认为您只需要 if(df[i, 3] == 0) 在第二个代码块中,if(is.na(df[i,3]))
  • 也许你想要if ( length(df[i, 3]) == 0 ) {
  • 谢谢,但它不起作用。
  • "谢谢,但它不起作用。"当我使用该代码时,它____,这是我得到的错误,或者这就是它与我预期的不同之处。

标签: r


【解决方案1】:

与其使用 for 循环来转换列,不如使用 dplyr::mutate 函数?

library(dplyr)

testFrame <- data.frame(a = 1:5, b = c(0,1,1,NA,0))

testFrameEdited <- testFrame %>% 
  mutate(b = ifelse(b == 0 | is.na(b), 'Not found', b))

testFrameEdited

返回

  a         b
1 1 Not found
2 2         1
3 3         1
4 4 Not found
5 5 Not found

【讨论】:

  • 主要目的不是找到什么是价值。 for循环根据链接查找一些值,但是当第n行的链接不工作时循环结束。其他链接正在工作,但找不到它们。我的目标是跳过它找不到的链接并保持循环运行。我在上面添加了一个示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多