如何使用purrr :: map实现行式迭代?
这是我用标准行方式应用的方法.
df <- data.frame(a = 1:10, b = 11:20, c = 21:30)
lst_result <- apply(df, 1, function(x){
var1 <- (x[['a']] + x[['b']])
var2 <- x[['c']]/2
return(data.frame(var1 = var1, var2 = var2))
})
Run Code Online (Sandbox Code Playgroud)
但是,这不是太优雅,我宁愿用purrr来做.可能(也可能不会)更快.
我想完全加入2 df.令我惊讶的是,dplyr的默认行为是加入NA,如果它们存在于两个df中.有没有阻止dplyr执行此操作的功能?
以下是内部联接的示例:
x <- data.frame(a = c(5, NA, 9), b = 1:3)
y <- data.frame(a = c(5, NA, 9), c = 4:6)
z <- dplyr::inner_join(x, y, by = 'a')
Run Code Online (Sandbox Code Playgroud)
我希望z只包含2条记录,而不是3.理想情况下,我希望这样做而不必事先用NA手动过滤掉记录,然后将它们附加到结果中(因为这看起来很笨拙).
我理解如何使用map迭代df中的参数并创建一个新的列表列.
例如,
params <- expand.grid(param_a = c(2, 4, 6)
,param_b = c(3, 6, 9)
,param_c = c(50, 100)
,param_d = c(1, 0)
)
df.preprocessed <- dplyr::as.tbl(params) %>%
dplyr::mutate(test_var = purrr::map(param_a, function(x){
rep(5, x)
}
))
Run Code Online (Sandbox Code Playgroud)
但是,如果我想指定2个以上的参数,如何在pmap中使用类似的语法?
df.preprocessed <- dplyr::as.tbl(params) %>%
dplyr::mutate(test_var = purrr::pmap(list(x = param_a
,y = param_b
,z = param_c
,u = param_d), function(x, y){
rep(5,x)*y
}
)
)
Run Code Online (Sandbox Code Playgroud)
错误输出:
mutate_impl(.data,dots)出错:评估错误:未使用的参数(z = .l [[c(3,i)]],u = .l [[c(4,i)]]).
我想使用DT包在数据框中隐藏一列(下面例子中的col4).
我已经在这里找到了代码片段,但没有用 - col4仍然显示.这是我的sessionInfo,以及我可重复的例子.
> sessionInfo()
R version 3.2.3 (2015-12-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils
[5] datasets methods base
other attached packages:
[1] DT_0.1.55 shiny_0.13.1
loaded via a namespace (and not attached):
[1] htmlwidgets_0.6 magrittr_1.5
[3] R6_2.1.2 htmltools_0.3.5
[5] tools_3.2.3 yaml_2.1.13
[7] Rcpp_0.12.4 jsonlite_0.9.19
[9] digest_0.6.9 xtable_1.8-2
[11] httpuv_1.3.3 …Run Code Online (Sandbox Code Playgroud) 我试图计算源向量和tibble中的比较向量之间的Jaccard相似性.
首先,使用names_字段(字符串向量)创建一个tibble.使用dplyr的mutate,创建names_vec,列表列,其中每行现在是一个向量(向量的每个元素都是一个字母).
然后,使用列jaccard_sim创建一个新的tibble,它应该计算Jaccard相似度.
source_vec <- c('a', 'b', 'c')
df_comp <- tibble(names_ = c("b d f", "u k g", "m o c"),
names_vec = strsplit(names_, ' '))
df_comp_jaccard <- df_comp %>%
dplyr::mutate(jaccard_sim = length(intersect(names_vec, source_vec))/length(union(names_vec, source_vec)))
Run Code Online (Sandbox Code Playgroud)
jaccard_sim中的所有值都为零.但是,如果我们运行这样的东西,我们得到第一个条目的正确的Jaccard相似度为0.2:
a <- length(intersect(source_vec, df_comp[[1,2]]))
b <- length(union(source_vec, df_comp[[1,2]]))
a/b
Run Code Online (Sandbox Code Playgroud) 我无法在R包帮助中显示编号列表.
这是我在roxygen中所拥有的:
#' @return
#' Bunch of text
#' Bunch of text:
#' \enumerate {
#' \item a
#' \item b
#' \item c
#' }
Run Code Online (Sandbox Code Playgroud)
这显示没有数字.保存文件后,单击Build & Reload in RStudio,然后运行devtools::document,然后devtools::load_all.当我在包上运行帮助时,我在控制台中收到以下消息:
Using development documentation for function name
Run Code Online (Sandbox Code Playgroud) 我在 Shiny 应用程序中显示图像时遇到问题。代码保存在桌面中,在那里我还有一个带有 logo.png 的 www 文件夹。我也将工作目录设置为桌面:
library(shiny)
library(png)
ui <- fluidPage(
img(src="logo.png", height = 400, width = 400)
) #close fluidpage
server <- function(input, output, session){
} # closer server
shinyApp(ui=ui, server=server)
Run Code Online (Sandbox Code Playgroud)
为了便于理解,我更喜欢将 server 和 ui 放在同一个文件中。也许这就是问题所在?
我有功能在2014-11-01和2015-10-31之间刮掉比特币subreddit中的所有帖子.
但是,我只能提取大约990个帖子,这些帖子可以追溯到10月25日.我不明白发生了什么.在参考https://github.com/reddit/reddit/wiki/API之后,我在每个提取之间包含了一个15秒的Sys.sleep ,但无济于事.
此外,我尝试从另一个subreddit(健身)刮,但它也返回约900个帖子.
require(jsonlite)
require(dplyr)
getAllPosts <- function() {
url <- "https://www.reddit.com/r/bitcoin/search.json?q=timestamp%3A1414800000..1446335999&sort=new&restrict_sr=on&rank=title&syntax=cloudsearch&limit=100"
extract <- fromJSON(url)
posts <- extract$data$children$data %>% dplyr::select(name, author, num_comments, created_utc,
title, selftext)
after <- posts[nrow(posts),1]
url.next <- paste0("https://www.reddit.com/r/bitcoin/search.json?q=timestamp%3A1414800000..1446335999&sort=new&restrict_sr=on&rank=title&syntax=cloudsearch&after=",after,"&limit=100")
extract.next <- fromJSON(url.next)
posts.next <- extract.next$data$children$data
# execute while loop as long as there are any rows in the data frame
while (!is.null(nrow(posts.next))) {
posts.next <- posts.next %>% dplyr::select(name, author, num_comments, created_utc,
title, selftext)
posts <- rbind(posts, posts.next)
after <- posts[nrow(posts),1]
url.next <- paste0("https://www.reddit.com/r/bitcoin/search.json?q=timestamp%3A1414800000..1446335999&sort=new&restrict_sr=on&rank=title&syntax=cloudsearch&after=",after,"&limit=100")
Sys.sleep(15)
extract …Run Code Online (Sandbox Code Playgroud) 我正在尝试查看我在本地计算机上重建包后创建的小插图。请注意,这与这篇文章的建议无关,因为我不是从 Github 克隆的。
我的小插图文件的小插图部分如下所示:
vignette: >
%\VignetteIndexEntry{pack_name}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
Run Code Online (Sandbox Code Playgroud)
过程是:
Ctr + Shift + K 编织小插图
Ctr + Shift + B 重建包
进入 browseVignettes("package name")
获取错误:
No vignettes found by browseVignettes
我也尝试更改knitr::markdown为knitr::knitr,但没有帮助。
整个小插图顶部:
---
title: "Random title"
author: "Author"
date: "`r Sys.Date()`"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{vignette_name}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
Run Code Online (Sandbox Code Playgroud) 我想在我的 Rshiny 应用程序中加入自定义字体。我有预感代码会放在tags$style 中,但没有实际的代码来包含它。
示例代码:
ui <- fluidPage(
tags$style( ),
column(12,
dataTableOutput("testtab")
) # close column
) #close fluidpage
server <- function(input, output, session) {
output$testtab <-
DT::renderDataTable({
tab <- data.frame(a = 1:10, b = 11:20, c = 21:30)
dat.tab <- datatable(tab) %>% formatPercentage('a', 0) %>%
formatCurrency(1:ncol(tab), '$')
return(dat.tab)
}) # close renderDataTable
} # close server
shinyApp(ui=ui, server=server)
Run Code Online (Sandbox Code Playgroud)
例如,假设我想使用网络上的任何自定义字体。