小编Man*_*l R的帖子

如何将多个(excel)文件读入R?

我有上百个中等大小的Excel文件(5000两50.0000行之间有大约100列)加载到R.他们有一个明确的命名模式,比如x_1.xlsx,x_2.xlsx等等.

如何以最快,最直接的方式将这些文件加载​​到R中?

import excel r

31
推荐指数
1
解决办法
3万
查看次数

使用RMarkdown在html_document中使用tikz

问题: 有没有办法在Rmarkdown文档中使用tikz表示法而无需将文档编译为pdf?

而且(有点朝同一方向):

问题: 在我想要编译为html的RMarkdown文档中添加多个tikz图形的最佳方法是什么(同时保持flexibilty将文件编译为pdf或后期的单词)?

我已经阅读了很多帖子的答案(比如R Markdown中的TikZ或者我如何使用TikZ制作独立(SVG)图形?),这些答案提出了类似的问题,但我仍然不完全确定,因此问题.

我基本上想要运行这段代码

---
output: pdf_document
header-includes: 
  - \usepackage{tikz}
---

## TikZ picture

Some picture

\begin{tikzpicture}
 \draw (0,0) circle (2cm);
\end{tikzpicture}
Run Code Online (Sandbox Code Playgroud)

而不是pdf_document我想要html_document+一些魔法自动将tikz图形转换为html可以理解的东西.有什么建议?

svg r tikz r-markdown

11
推荐指数
1
解决办法
1530
查看次数

查找与候选值向量中的值匹配的矩阵元素的数组索引

我已经对此进行了糊涂和stackoverflowing了一段时间,但我似乎找不到正确的答案。

我有一个矩阵,其中包含不同的字符串,例如"a",或"gamma",甚至是强制转换为字符的数字。

m如果元素的m匹配候选值向量中的值,如何获得矩阵的数组索引(请注意,这些值可以是任何字符串)。这是我尝试过的。我虽然which(m %in% ...)会这样做,但不会返回我期望的结果。

m <- matrix(c(0, "a", "gamma", 0, 0.5, 0, 0, 0, 0), ncol = 3)
m
#>      [,1]    [,2]  [,3]
#> [1,] "0"     "0"   "0" 
#> [2,] "a"     "0.5" "0" 
#> [3,] "gamma" "0"   "0"

which(m == "a", arr.ind = TRUE) # as expected
#>      row col
#> [1,]   2   1

which(m == "a" | m == "gamma", arr.ind = TRUE) # also obvious
#>      row col …
Run Code Online (Sandbox Code Playgroud)

r matrix subset

7
推荐指数
2
解决办法
68
查看次数

当 pdf 中的块有分页符时代码块突出显示 (knitr)

这是一个包含随机代码块的 .Rnw 文件,该文件在编织为 pdf 时打印在两页上。我注意到代码块突出显示在分页后停止。

  1. 这是为什么?
  2. 我如何解决它?

.Rnw 文件

\documentclass{article}

%%% Knitr setup
<<include=FALSE, cache=FALSE>>=
library(knitr)
@

\begin{document}
$\;$
\vspace{15cm}
<<eval = FALSE>>=
model <- "
# Measurement models
PR =~ PR1 + PR2 + PR3
IM =~ IM1 + IM2 + IM3
DI =~ DI1 + DI2 + DI3
AD =~ AD1 + AD2 + AD3
DL =~ DL1 + DL2 + DL3
AA =~ AA1 + AA2 + AA3 + AA4 + AA5 + AA6
LO =~ LO1 …
Run Code Online (Sandbox Code Playgroud)

latex syntax-highlighting knitr rnw

6
推荐指数
0
解决办法
49
查看次数

R 4.0.0 + RStudio 中的“调试位置是近似的,因为源不可用”

我已经更新到 R4.0.0和 RStudio 版本1.2.5042

我正在开发一个包,我经常使用以下工作流程:

  1. 通过单击“安装并重新启动”按钮(包括--with-keep.sourceR CMD INSTALL 选项)从 RStudio 中构建包。
  2. .R我要调试的函数的文件中设置断点。
  3. 调用该函数并等待调试器准确地停止在我设置断点的位置。

这曾经很好地工作。但是,现在我总是得到:

调试位置是近似的,因为源不可用

这是 annyoing,因为我仍然可以调试,但我不在实际功能中了。

任何提示/想法为什么会这样?

编辑 (11.05.2020)

这似乎是 RStudio 和 R 4.0.0 的问题。这就是我这么认为的原因。我使用了另一台运行 Windows 10 的机器并执行了以下步骤(按此顺序;对于 Windows 用户应该可以重现)。一开始我安装了 R 3.6.1 和 RStudio 1.2.5042(在撰写本文时,1.2.5042 是当前版本;也尝试使用 RStudio 的预览版 1.3.957)。

  1. 克隆我从 Github 开发的包:

    git clone "https://github.com/M-E-Rademaker/cSEM"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 转到包根目录并打开 cSEM.Rproj

  3. 运行devtools::install_github("M-E-Rademaker/cSEM")自动安装包并下载所有cSEM依赖的包。
  4. 在 RStudio 中:点击“ Build”安装和“ Install and Restart
  5. 现在导航到源文件。例如:R/00_csem.R并在例如第 321 行设置断点。
  6. 现在运行以下代码:

    model <- "
    # …
    Run Code Online (Sandbox Code Playgroud)

debugging r rstudio rtools r-4.0.0

6
推荐指数
1
解决办法
1097
查看次数

使用purrr函数并行迭代两个嵌套列表

我正在玩一些purrr功能,并发现(令我高兴的)purrr::at_depth(.x, .depth, .f, ...)这是短暂的purrr::map(x, . %>% map(fun)).

问题: 当我有两个嵌套列表要并行迭代时,是否有类似的功能或正确的" purrr-way"做同样的事情

举个例子:

x <- list(list(10, 20), list(30, 40))
y <- list(list(1, 2), list(3, 4))

a <- list()
for(i in seq_along(x)) {
   a[[i]] <- map2(x[[i]], y[[i]], `+`) 
}
Run Code Online (Sandbox Code Playgroud)

这有效,但它相当脏,我想避免for循环.

r purrr

5
推荐指数
1
解决办法
772
查看次数

禁止自动输出到R中的控制台

该函数callmultmoments计算正态分布的矩。"Sum of powers is odd. Moment is 0."如果幂的和为奇数,该功能将自动打印。在保持原始功能不变的情况下,有什么方法可以抑制这种情况。

例如:

require(symmoments)
# Compute the moment for the 4-dimensional moment c(1,1,3,4):

m.1134 <- callmultmoments(c(1,1,3,4))
Run Code Online (Sandbox Code Playgroud)

编辑:

如此处所述我们可以使用

## Windows
sink("nul") 
...
sink()

## UNIX
sink("/dev/null")    # now suppresses
....                 # do stuff
sink()               # to undo prior suppression, back to normal now
Run Code Online (Sandbox Code Playgroud)

但是,我正在编写一个程序包,因此我希望它与平台无关。有什么想法可以代替吗?

r output

5
推荐指数
1
解决办法
2584
查看次数

使用tidyr :: complete with group_by

有谁知道是否tidyr::complete()支持分组通过group_by()

确切地说:我有一些看起来像这样的数据框

df <- data.frame(
  "ID"   = rep(1:2, each = 2),
  "Col1" = c("A", NA, "AA", NA),
  "Col2" = c("B", "C", "BB", "CC"))
Run Code Online (Sandbox Code Playgroud)

现在我想使用complete()group_by()计算每组的所有可能组合!

df %>% 
 group_by(ID) %>% 
 complete(Col1, Col2)

  Error in .Call("dplyr_left_join_impl", PACKAGE = "dplyr", x, y, by_x,  : 
  negative length vectors are not allowed
Run Code Online (Sandbox Code Playgroud)

这会导致错误.但是,使用complete()没有分组工作,但这不是我想要的.

df %>% 
 complete(Col1, Col2)
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 我做错了什么,或者根本complete()不合作group_by
  2. 如果是这样,我怎么能这样做(最好不使用循环)?

r dplyr tidyr

4
推荐指数
1
解决办法
1324
查看次数

nchar(替代(a + b + c))实际上是多少?

我一直在玩弄,substitute并不能完全弄清楚nchar(substitute(a + b + c))实际的结果是什么?结果是

nchar(substitute(a + b + c))
[1] 1 5 1
Run Code Online (Sandbox Code Playgroud)

究竟究竟是什么?我认为中期只是该表达式的元素数量.但是下面的内容是什么呢?其他1代表什么呢?

nchar(substitute(a + b))
[1] 1 1 1
Run Code Online (Sandbox Code Playgroud)

r

3
推荐指数
1
解决办法
51
查看次数

查找所有单词末尾或点前面带有“&lt;-”的单词

我如何提取所有<-在单词末尾或介于两者之间带有符号“ ”的单词,但在后一种情况下,仅当“ <-”符号后跟一个点时。

把它放在上下文中。练习 6.5.3 的哈德利Wickhams -预研 要求读者列出基本包所有替代函数。

只有一种方法的替换函数由<- 函数名称末尾的符号表示。但是,泛型函数的方法名称附加到替换形式的名称(带一个点),这样<-不再位于函数名称的末尾。例子split<-.data.frame

编辑:

obj <- mget(ls("package:base"), inherits = TRUE)
funs <- Filter(is.function, objs)
Run Code Online (Sandbox Code Playgroud)

这就是您提取基础包中所有功能的方式。现在我只想找到替换功能。

regex r

3
推荐指数
1
解决办法
114
查看次数

使用来自tidyr的聚集会改变我的回归结果

当我运行下面的代码时,一切都按预期工作

# install.packages("dynlm")
# install.packages("tidyr")
require(dynlm)
require(tidyr)


Time <- 1950:1993

Y <- c(5820, 5843, 5917, 6054, 6099, 6365, 6440, 6465, 6449, 6658,  6698, 6740, 6931, 
       7089, 7384, 7703, 8005, 8163, 8506, 8737, 8842, 9022, 9425,  9752, 9602, 9711, 
       10121, 10425, 10744, 10876, 10746, 10770, 10782, 11179, 11617, 12015, 12336, 
       12568, 12903, 13029, 13093, 12899, 13110, 13391)

X <- c(6284, 6390, 6476, 6640, 6628, 6879, 7080, 7114, 7113, 7256, 7264, 7382, 7583, 7718,  
       8140, 8508, 8822, 9114, 9399, 9606, 9875, 10111, …
Run Code Online (Sandbox Code Playgroud)

r tidyr

2
推荐指数
1
解决办法
370
查看次数

错误:在将读取器形式0.1.1更新为0.2.0后使用dplyr :: bind_rows时损坏数据帧

我刚刚将readr软件包从版本0.1.1 更新到0.2.0,但现在在抛出错误之前有效的操作.

在更新之前,我使用readr包执行此操作:

file.list <- list.files(<path>, pattern='*.csv')

df.list <- lapply(file.list, read_csv2)
df.list <- lapply(df.list, function(x) x[-1,])
Run Code Online (Sandbox Code Playgroud)

最后一步是必要的,因为我有一些带有特殊字符的长标题,以某种方式导致额外的行被读取.这是另一个问题,但只是删除第一行一直工作到那时.

read_csv2 警告我有关列名称的问题但是,如上所述,我通过删除行来修复:

Warning: 1 parsing failure.
  row col    expected      actual
   1  -- 227 columns 222 columns
Run Code Online (Sandbox Code Playgroud)

然后我继续将所有数据帧绑定到一个dplyr::bind_rows(因为每个.csv具有相同的头).这之前完美无缺,但现在当我这样做时,我得到了

> full.data <- bind_rows(df.list)
Error: corrupt data frame
Run Code Online (Sandbox Code Playgroud)

我没有改变任何其他东西(相同的R版本,相同的RStudio版本,没有更新其他包).有经验的人有什 与read_csv2的工作方式相比,版本0.1.1有任何重大变化.

谢谢

r dplyr readr

1
推荐指数
1
解决办法
1656
查看次数

从矩阵中提取特定元素

假设我有一个矩阵

x <- matrix(c(0, 1, 1,
              1, 0, 0,
              0, 1, 0), byrow = TRUE, nrow = 3, 
            dimnames = list(c("a", "b", "c"), c("a", "b", "c")))
Run Code Online (Sandbox Code Playgroud)

我现在需要两个向量(或者甚至是data.frame中更好的拖动列),第一个向量/列保存列名称,第二个向量保存rowname,其中所有元素x都是1.

所以在我的例子中我想得到这个

v1 <- c("a", "b", "b", "c")
v2 <- c("b", "a", "c", "a")
Run Code Online (Sandbox Code Playgroud)

对于20 x 20矩阵来说,这是最快和最优雅的方式.

r matrix extraction

0
推荐指数
1
解决办法
47
查看次数