如何在R中的另一个脚本中调用一个脚本

时间:2019-05-14 23:17:32

标签: r scripting

我在R中创建了一系列命令,这些命令可以使用特定的URL完成工作。我想遍历驻留在单独文本文件中的URL列表上的一系列命令。如何一次将列表调用到命令中?

我不知道此编程操作的正确术语是什么。我研究了脚本和批处理编程,但这不是我想要做的。

# URL that comes from list
URL <- "http://www.urlfromlist.com"

# Load URL
theurl <- getURL(URL,.opts = list(ssl.verifypeer = FALSE) )

# Read the tables
tables <- readHTMLTable(theurl)

# Create a list
tables <- list.clean(tables, fun = is.null, recursive = FALSE)

# Convert the list to a data frame
df <- do.call(rbind.data.frame, tables)

# Save dataframe out as a csv file
write.csv(df2, file = dynamicname, row.names=FALSE)

上面的代码是我在做什么。每次列表中的第一个变量都必须是一个不同的URL-冲洗并重复。谢谢!

更新的代码-这仍然不会写出任何文件,但是可以运行。

# Function to pull tables from list of URLs
URLfunction<- function(x){
  # URL that comes from list
  URL <- x

  # Load URL
  theurl <- RCurl::getURL(URL,.opts = list(ssl.verifypeer = FALSE) )

  # Read the tables
  tables <- XML::readHTMLTable(theurl)

  # Create a list
  tables <- rlist::list.clean(tables, fun = is.null, recursive = FALSE)

  # Convert the list to a data frame
  df <- do.call(rbind,tables)

  # Split date and time column out
  df2 <- separate(df, "Date / Time", c("Date", "Time"), sep = " ")

  # Fill the missing column with text, in this case shapename
  shapename <- qdapRegex::ex_between(URL, "ndxs", ".html")
  df2$Shape <- shapename

  # Save dataframe out as a csv file
  write.csv(result, paste0(shapename, '.csv', row.names=FALSE))

  return(df2)
}

URL <- read.csv("PATH", header = FALSE)
purrr::map_df(URL, URLfunction) ## Also tried purrr::map_df(URL[,1], URLfunction) 

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题, 我的答案可能与您的问题有关。

使用的库

library(RCurl)
library(XML)
library(rlist)
library(purrr)

定义功能

URLfunction<- function(x){
# URL that comes from list
URL <- x

# Load URL
theurl <- RCurl::getURL(URL,.opts = list(ssl.verifypeer = FALSE) )

# Read the tables
tables <- XML::readHTMLTable(theurl)

# Create a list
tables <- rlist::list.clean(tables, fun = is.null, recursive = FALSE)

# Convert the list to a data frame
df <- do.call(rbind,tables)

# Save dataframe out as a csv file

return(df)
}

假设您有如下数据

(我不确定您看起来像什么数据)

URL <- c("https://stackoverflow.com/questions/56139810/how-to-call-a-script-in-another-script-in-r",
         "https://stackoverflow.com/questions/56122052/labelling-points-on-a-highcharter-scatter-chart/56123057?noredirect=1#comment98909916_56123057")

result<- purrr::map(URL, URLfunction) 
result <- do.call(rbind, result)

Write.csv是最后一步

如果要通过每个URL写入write.csv,请plz移至URLfunction

write.csv(result, file = dynamicname, row.names=FALSE)

附加

列表版本

URL <- list("https://stackoverflow.com/questions/56139810/how-to-call-a-script-in-another-script-in-r",
        "https://stackoverflow.com/questions/56122052/labelling-points-on-a-highcharter-scatter-chart/56123057?noredirect=1#comment98909916_56123057")


result<- purrr::map_df(URL, URLfunction) 

>result

   asked    today yesterday
1 viewed 35 times      <NA>
2 active    today      <NA>
3 viewed     <NA>  34 times
4 active     <NA>     today

CSV

URL <- read.csv("PATH",header = FALSE)

result<- purrr::map_df(URL[,1], URLfunction) 

>result

   asked    today yesterday
1 viewed 35 times      <NA>
2 active    today      <NA>
3 viewed     <NA>  34 times
4 active     <NA>     today

添加代码的编辑版本。


URLfunction<- function(x){
  # URL that comes from list
  URL <- x

  # Load URL
  theurl <- RCurl::getURL(URL,.opts = list(ssl.verifypeer = FALSE) )

  # Read the tables
  tables <- XML::readHTMLTable(theurl)

  # Create a list
  tables <- rlist::list.clean(tables, fun = is.null, recursive = FALSE)

  # Convert the list to a data frame
  df <- do.call(rbind,tables)

  # Split date and time column out
  df2 <- tidyr::separate(df, "Date / Time", c("Date", "Time"), sep = " ")

  # Fill the missing column with text, in this case shapename

  shapename <- unlist(qdapRegex::ex_between(URL, "ndxs", ".html"))
  # qdapRegex::ex_between returns list type, when it added to df2 it couldn't be saved. 
  # So i added 'unlist' 

  df2$Shape <- shapename

  # Save dataframe out as a csv file
  write.csv(df2, paste0(shapename, '.csv'), row.names=FALSE)
# Here are two error.
# First, You maked the data named 'df2' not 'result'. So i changed result -->df2
# Second, row.names is not the 'paste0' attributes, it is 'write.csv's attributes.  
  return(df2)
}

定义上述功能后,

URL = c("nuforc.org/webreports/ndxsRectangle.html",
        "nuforc.org/webreports/ndxsRound.html")

RESULT = purrr::map_df(URL, URLfunction) ## Also tried purrr::map_df(URL[,1], URLfunction) 

最后,我得到下面的结果

1. Rectangle.csv, Round.csv files on your desktop(Saved path).
2. Returning row binded data frame looks like below (2011 x 8)
> RESULT[1,]
    Date  Time     City State     Shape  Duration
1 5/2/19 00:20 Honolulu    HI Rectangle 3 seconds
                                                                                                                             Summary
1 Several of rectangles connected in different LED like colors.  Such as red, green, blue, etc. ;above Waikiki. ((anonymous report))
  Posted
1 5/9/19