我正在尝试编写一组函数来检查缺少的R包,并在必要时安装它们.在StackOverflow上有一些很好的代码:从这里开始.
我想让函数尽可能保持沉默,特别是因为R甚至以红色墨水返回成功的消息.因此,我试图将quietly = TRUE论证传递给两者library和require.
但是,这些选项似乎永远不会起作用:
# attempt to get a silent fail
require(xyz, quietly = TRUE)
Warning message:
In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, :
there is no package called ‘xyz’
Run Code Online (Sandbox Code Playgroud)
我如何能够require默默地失败,以及我没有得到关于该quietly选项的内容?
文件说:
quietly合乎逻辑的.如果为TRUE,则不会打印确认包装载的消息,并且通常,如果包装加载失败,则不会打印错误/警告.
但在我个人的经历中,"我经常"应该"几乎从不".我很高兴听到你的经历.理由:编码功能,以帮助学生.
加.同样的问题适用quiet = TRUE于install.packages().它只会杀死进度条,但不会删除随后出现的"下载的二进制包都在"消息(黑色,黑色!),即使它对中位用户没用.
加.如果这可能是任何人都感兴趣,到目前为止的代码:
## getPackage(): package loader/installer
getPackage <- function(pkg, load = TRUE, silent = FALSE, repos = "http://cran.us.r-project.org") { …Run Code Online (Sandbox Code Playgroud) 从Wikipedia导入表后,我有一个以下形式的值列表:
> tbl[2:6]
$`Internet
Explorer`
[1] "30.71%" "30.78%" "31.23%" "32.08%" "32.70%" "32.85%" "32.04%" "32.31%" "32.12%" "34.07%" "34.81%"
[12] "35.75%" "37.45%" "38.65%" "40.63%" "40.18%" "41.66%" "41.89%" "42.45%" "43.58%" "43.87%" "44.52%"
$Chrome
[1] "36.52%" "36.42%" "35.72%" "34.77%" "34.21%" "33.59%" "33.81%" "32.76%" "32.43%" "31.23%" "30.87%"
[12] "29.84%" "28.40%" "27.27%" "25.69%" "25.00%" "23.61%" "23.16%" "22.14%" "20.65%" "19.36%" "18.29%"
Run Code Online (Sandbox Code Playgroud)
我试图摆脱百分号,以便将数据转换为数字形式.
是否有更快的方法来清理这些数据而不是进行矢量化?我目前的代码如下:
data <- lapply(tbl[2:6], FUN = function(x) as.numeric(gsub("%", "", x)))
Run Code Online (Sandbox Code Playgroud)
数据最终成为数据框架,但我无法gsub在数据框的所有元素上正常工作.有没有办法gsub()数据框的每个元素?
该项目的代码是在线的,带有结果.提前致谢!
我们的好奇心是,有没有办法从R中读取PDF元数据 - 例如下面显示的信息?
通过在[r] pdf metadata当前的问题库中搜索,我无能为力.任何指针都非常欢迎!

我正在x从df在下面提供的工作示例中调用的数据帧调用的变量中构建分位数 - 分位数图.我想用name我的df数据集的变量标记点.
是否有可能在ggplot2中这样做而不诉诸痛苦的解决方案(手工编写理论分布然后根据经验分析绘制它)?
编辑:它发生了是的,感谢用户发布然后删除了他的答案.在下面的Arun回答之后看到评论.感谢Didzis的巧妙解决方案ggbuild.
# MWE
df <- structure(list(name = structure(c(1L, 2L, 3L, 4L, 5L, 7L, 9L,
10L, 6L, 12L, 13L, 14L, 15L, 16L, 17L, 19L, 18L, 20L, 21L, 22L,
8L, 23L, 11L, 24L), .Label = c("AUS", "AUT", "BEL", "CAN", "CYP",
"DEU", "DNK", "ESP", "FIN", "FRA", "GBR", "GRC", "IRL", "ITA",
"JPN", "MLT", "NLD", "NOR", "NZL", "PRT", "SVK", "SVN", "SWE",
"USA"), class = "factor"), x = c(-0.739390016757746, 0.358177826874146,
1.10474523846099, …Run Code Online (Sandbox Code Playgroud) 我的facet_wrap文档中的数据看起来像这个例子:
http://docs.ggplot2.org/current/facet_wrap-29.png
我想使用所有数据填充整个视图的最后一个方面.
是否有一种简单的方法来添加"总"方面facet_wrap?添加边距很容易facet_grid,但该选项不存在facet_wrap.
注意:使用facet_grid,如果你想有一个象限如上面的情节,这就要求不是一个选项ncol或nrow参数的facet_wrap.
我试图从法国下议院网站上的两页中删除所有账单.这些页面涵盖了2002 - 2012年,每个代表不到1,000个账单.
为此,我getURL通过这个循环:
b <- "http://www.assemblee-nationale.fr" # base
l <- c("12","13") # legislature id
lapply(l, FUN = function(x) {
print(data <- paste(b, x, "documents/index-dossier.asp", sep = "/"))
# scrape
data <- getURL(data); data <- readLines(tc <- textConnection(data)); close(tc)
data <- unlist(str_extract_all(data, "dossiers/[[:alnum:]_-]+.asp"))
data <- paste(b, x, data, sep = "/")
data <- getURL(data)
write.table(data,file=n <- paste("raw_an",x,".txt",sep="")); str(n)
})
Run Code Online (Sandbox Code Playgroud)
有没有办法优化getURL()这里的功能?我似乎无法通过传递async=TRUE选项使用并发下载,这每次都给我同样的错误:
Error in function (type, msg, asError = TRUE) :
Failed to connect to 0.0.0.12: …Run Code Online (Sandbox Code Playgroud) 我正在使用R来使用XPath语法从该页面上的主表中删除链接.主表是页面上的第三个,我只想要包含杂志文章的链接.
我的代码如下:
require(XML)
(x = htmlParse("http://www.numerama.com/magazine/recherche/125/hadopi/date"))
(y = xpathApply(x, "//table")[[3]])
(z = xpathApply(y, "//table//a[contains(@href,'/magazine/') and not(contains(@href, '/recherche/'))]/@href"))
(links = unique(z))
Run Code Online (Sandbox Code Playgroud)
如果查看输出,最后的链接不是来自主表,而是来自侧边栏,即使我在第三行中选择了主表,要求对象y只包含第三个表.
我究竟做错了什么?用XPath编写代码的正确/更有效的方法是什么?
注意:XPath新手写作.
回答(非常快),非常感谢!我的解决方案如下.
extract <- function(x) {
message(x)
html = htmlParse(paste0("http://www.numerama.com/magazine/recherche/", x, "/hadopi/date"))
html = xpathApply(html, "//table")[[3]]
html = xpathApply(html, ".//a[contains(@href,'/magazine/') and not(contains(@href, '/recherche/'))]/@href")
html = gsub("#ac_newscomment", "", html)
html = unique(html)
}
d = lapply(1:125, extract)
d = unlist(d)
write.table(d, "numerama.hadopi.news.txt", row.names = FALSE)
Run Code Online (Sandbox Code Playgroud)
这将在此网站上保存所有带有关键字"Hadopi"的新闻项的链接.
这是setdiff正常的行为:
x <- rep(letters[1:4], 2)
x
# [1] "a" "b" "c" "d" "a" "b" "c" "d"
y <- letters[1:2]
y
# [1] "a" "b"
setdiff(x, y)
# [1] "c" "d"
Run Code Online (Sandbox Code Playgroud)
...但是如果我只想y取出一次,那么得到以下结果呢?
# "c" "d" "a" "b" "c" "d"
我猜,有使用任何一种简单的解决方案setdiff还是%in%,但我就是不能看到它.
有些数据集带有全小写值标签,最后我会得到图表和表格,显示"埃及","约旦"和"沙特阿拉伯"的结果,而不是大写的国家名称.
我想proper()字符串函数可以为我做一些事情,但我找不到正确的方法来编写Stata 11的代码,它将为给定变量的所有值标签大写.
我基本上需要proper()在变量的所有值标签上运行该函数,然后将它们分配给变量.这可能foreach在Stata中使用循环和宏吗?