【发布时间】:2019-06-26 08:00:11
【问题描述】:
我在 R 脚本中有这个 for 循环:
url <- "https://example.com"
page <- html_session(url, config(ssl_verifypeer = FALSE))
links <- page %>%
html_nodes("td") %>%
html_nodes("tr") %>%
html_nodes("a") %>%
html_attr("href")
base_names <- page %>%
html_nodes("td") %>%
html_nodes("tr") %>%
html_nodes("a") %>%
html_attr("href") %>%
basename()
for(i in 1:length(links)) {
site <- html_session(URLencode(
paste0("https://example.com", links[i])),
config(ssl_verifypeer = FALSE))
writeBin(site$response$content, base_names[i])
}
这会循环链接,并将文本文件下载到我的工作目录。我想知道是否可以将return 放在某个地方,以便它返回文档。
原因是,我正在 NiFi 中执行我的脚本(使用 ExecuteProcess),它并没有将我的抓取文件发送到下线。相反,它只显示了我的 R 脚本的头部。我假设您会将for 循环包装在fun <- function(x) {} 中,但我不确定如何将x 集成到已经工作的刮板中。
我需要它来顺流返回文档,而不仅仅是这个:
处理器配置:
即使你不熟悉 NiFi,它也会对 R 部分有很大帮助!谢谢
【问题讨论】:
-
您可以使用
out <- Map(function(link, bn) { site <- ...link...; writeBin(..., bn); return(site$response$content); }, links, base_names),而不是for循环。 (顺便说一句:您缺少base_names的定义。) -
糟糕,修复了命名错误@r2evans,我的错。
bn在您的评论中指的是什么? -
bn是我在匿名函数中用作第二个参数的任意名称;Map将links和base_names的成对元素“压缩”在一起,将第一个元素分别分配给函数内的link和bn。如果lapply(links, function(link) {...})仅适用于链接,则Map(function(link, bn) {...}, links, base_names)与两者等效。 -
所以
Map(myfunc, links, base_names)展开到myfunc(links[1], base_names[1]),然后myfunc(links[2], base_names[2])等Map总是返回list,而mapply可能 返回一个向量(类似于lapply-vs-sapply)。 -
我正在尝试修改您的第一条评论(感谢它的逻辑,顺便说一句)。我假设我应该摆脱分号?为愚蠢的问题道歉。不像我应该熟悉的那样熟悉
Map。很难用评论格式来描绘。如果您想提供答案,那将很有帮助
标签: r for-loop apache-nifi