执行后为什么我的列表空了?

时间:2016-01-09 14:51:08

标签: r

我设法填充了我的doi_list,但如果我将代码封装到function中,它就无效。 From a tutorial我看到我认为这应该是可行的,doi_list完成后get_doi_from_category()为空。

library(aRxiv)

get_doi_from_category <- function(category, doi_list) {

  arxiv_rec <- arxiv_search(category)
  arxiv_doi_list <- arxiv_rec[13]

  by(arxiv_doi_list, 1:nrow(arxiv_doi_list), 
     function(row) { 
       if(nchar(row) > 0) {
         doi_list <<- c(doi_list, row)
       }
     })
}

doi_list <- list()

get_doi_from_category('cat:stat.ML', doi_list)

for(doi in doi_list) 
{
  print(doi)
} 

get_doi_from_category('cat:stat.CO', doi_list)
get_doi_from_category('cat:stat.ME', doi_list)
get_doi_from_category('cat:stat.TH', doi_list)

PS:第一天 R

1 个答案:

答案 0 :(得分:1)

这是在R中做你想做的更好的方式:

categ <- c(CO = "cat:stat.CO", #I'm naming these elements so
           ME = "cat:stat.ME", #  that the corresponding elements
           TH = "cat:stat.TH", #  in the list are named as well.
           ML = "cat:stat.ML") #  Could also just set 'names(doi_list)' to 'categ'.

doi_list <- 
  lapply(categ, function(ctg)
    (doi <- arxiv_search(ctg)$doi)[nchar(doi) > 0])

我有点把你扔到最后一行的深处,内联doi;更为循序渐进的方法是:

lapply(categ, function(ctg){
  arxiv.df <- arxiv_search(ctg)
  doi <- arxiv.df$doi
  doi[nchar(doi) > 0]})