更换长度零R

时间:2016-06-03 19:51:05

标签: r for-loop dataframe web-scraping

我正在尝试提取一些网络数据并将其放入数据框中以供将来使用。某些列中的某些值为NA;我希望那些细胞有NA或一些文字。这是我正在使用的for循环:

    extra <- as.data.frame(matrix(NA, nrow = length(main.node), ncol = 2))
    for (i in 1:length(main.node)){
      extra[i,1] <- main.node[[i]]$data$author
      extra[i,2] <- main.node[[i]]$data$author_flair_text
      }

问题是author_flair_text的某些值不存在(作者列工作正常)。例如,打电话  main.node[[4]]$data$author_flair_text返回NULL

我收到了错误

Error in `[<-.data.frame`(`*tmp*`, i, 2, value = NULL) : 
  replacement has length zero

基本上,我需要for循环来填充缺少的信息。有没有办法在for循环中将NULL转换为“NULL”?

如果这有帮助,这里是main.node的来源:

raw_data = tryCatch(RJSONIO::fromJSON(readLines(URL, warn = FALSE)), 
                        error = function(e) NULL)
main.node = raw_data[[2]]$data$children

谢谢!

2 个答案:

答案 0 :(得分:1)

试试这个。警告我没有运行它,我只是写它所以可能有一个错字:

extra <- as.data.frame(matrix(NA, nrow = length(main.node), ncol = 2))
for (i in 1:length(main.node)){
  extra[i,1] <- main.node[[i]]$data$author
  temp <- main.node[[i]]$data$author_flair_text
  if(is.null(temp)){
    temp <- "NULL"
  }
  extra[i,2] <- temp
}

答案 1 :(得分:1)

您可以在此处使用ifelse()构造。它有test参数(对于条件),yes参数(如果test为true则为值)和no参数(如果测试为false则为值)。 / p>

在您的情况下,它看起来像这样:

temp <- main.node[[i]]$data$author_flair_text
extra[i,2] <- ifelse(is.null(temp), "your_null_indicator", temp)