小编Wal*_*cio的帖子

如何在R的setwd()命令中断行?

我尝试将所有R脚本行保持在80个字符以下.无论何时涉及到字符串,这都可能是一个挑战,但通常只是在不使用任何特殊字符的情况下打破行,如下所示:

plot(x, y, main = "some reeeealy long title, so long that
                   I need to break it into several lines
                   in order to satisfy my ****-retentive
                   self.")
Run Code Online (Sandbox Code Playgroud)

但是,有些功能setwd()只是不让我这样做.例如,跑步

setwd("/folder/another folder/yet another folder/
      what are you doing, hiding pr0n?/I think I've made my point/")
Run Code Online (Sandbox Code Playgroud)

返回以下错误:

Error in setwd("/folder/another folder/yet another folder/\n
      what are you doing, hiding pr0n?/I think I've made my point/") : 
cannot change working directory
Run Code Online (Sandbox Code Playgroud)

我试过在斜线角色以外的不同点上制动线,但是我无法让它起作用.我能找到的唯一解决方法是运行

setwd(paste("/folder/another folder/yet another folder/",
            "what are you doing, hiding pr0n?/I think …
Run Code Online (Sandbox Code Playgroud)

r

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

在addmargins函数上自定义"Sum"标签

让下表:

x <- sample(1:2, 100, replace = T)
tabela <- table(x)
Run Code Online (Sandbox Code Playgroud)

我添加了边距

> addmargins(tabela)
x
  1   2 Sum 
 51  49 100 
Run Code Online (Sandbox Code Playgroud)

但是,我想将"Sum"标签更改为"Total".我该怎么做呢?

我目前的解决方法是运行addmargins以获取函数的源代码,将其复制到我的脚本并将字符串更改"Sum""Total",但我想有一种更聪明的方法来实现这一点.

customization r function margins totals

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

比较R中的2个数据集

我从一个名为babies2009的数据集中提取了2个数据集(3个向量计数,名称,性别)

一个是女孩2009,包含所有女孩和其他男孩2009.我想知道男孩和女孩之间有什么相似的名字.

我试过这个

common.names = (boys2009$name %in% girls2009$name)
Run Code Online (Sandbox Code Playgroud)

当我尝试

babies2009[common.names, ] [1:10, ]
Run Code Online (Sandbox Code Playgroud)

我得到的只是女孩名字而不是俗名.

我已经确认这两个数据集确实包含男孩和女孩,分别采取10个样本...

boys2009 [1:10,]
girsl2009 [1:10,]
Run Code Online (Sandbox Code Playgroud)

我还能如何比较2个数据集并确定它们共享的值.谢谢,

compare r extract dataset

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

在R中使用()和ifelse()函数组合逻辑语句

我总是使用这样的命令:

which(foo$bar == 'A' | foo$bar == 'B' | foo$bar == 'C')
Run Code Online (Sandbox Code Playgroud)

由于它们都与同一个变量相关,我希望能够清理我的代码并执行以下操作:

which(foo$bar == 'A|B|C')  # such syntax works in grep, why not here?
# or...
which(foo$bar == c('A', 'B', 'C'))
Run Code Online (Sandbox Code Playgroud)

但这一切都不起作用!我很确定必须有一个简单的解决方案,我找不到它.我在ifelse()功能方面遇到同样的问题,因此通用解决方案的额外吹嘘权利.

boolean-logic r which

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

如何使用聚合(...,FUN =粘贴)使xtable工作?

说我有以下数据框:

df <- data.frame(sector = c(rep('a', 3), rep('b', 4)), id = 1:7)
Run Code Online (Sandbox Code Playgroud)

我想创建一个汇总表,报告每个扇区的ID列表,所以我这样做:

table <- xtable(aggregate(id ~ sector, df, paste))
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用xtable()上面的对象转换为LaTeX时,我收到以下错误:

> xtable(table)
Error in is.finite(x) : default method not implemented for type 'list'
Run Code Online (Sandbox Code Playgroud)

这是由第二列引起的,因为class(table$id)确认它是一个列表.

应该注意,将xtable()数据帧作为输入很好地处理.将"粘贴"更改为更常见的内容(如"sum"或"length")不会产生错误.

我能做些什么table(或为了xtable什么呢?所以它创造了我想要的桌子?所需的原始输出应如下所示:

\begin{table}[ht]
\centering
\begin{tabular}{rlr}
  \hline
 & sector & id \\ 
  \hline
1 & a &   1, 2, 3 \\ 
  2 & b &  4, 5, 6, 7\\ 
   \hline
\end{tabular}
\end{table}
Run Code Online (Sandbox Code Playgroud)

latex aggregate r xtable

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

R中没有更多的循环

我得出结论,R专家不太喜欢循环; 但是,作为一名前java程序员,这个事实对我来说有点苛刻.

我要动态地创建5个变量:x1,x2,x3,x4x5并指定他们中的每一个随机值.

> i = 1
> 
> while(i <= 5)
 {
   assign(paste("x", i, sep = ""), rnorm(1))
   i = i + 1       
 }
> x1
[1] 0.3853609
> x2
[1] 1.626055
> x3
[1] -1.043699
> x4
[1] 0.3449921
> x5
[1] -0.9768416
Run Code Online (Sandbox Code Playgroud)

好吧,这使用while循环,我正在寻找R方式这样做.我试过了:

assign(paste("x", 1:5, sep=""), rnorm(1)
Run Code Online (Sandbox Code Playgroud)

这给出了一个错误.我究竟做错了什么?

loops r

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

将TRUE和FALSE更改为是和否

我有以下R脚本:

x <- c('PE', 'MG', 'SP', 'GO', 'ES', 'PB', 'DF')
y <- c('PB', 'MG', 'SP', 'GO', 'ES', 'SE', 'DF')
z <- x == y
Run Code Online (Sandbox Code Playgroud)

以便

> z
[1] FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE
Run Code Online (Sandbox Code Playgroud)

但是,我希望z(以及脚本中的其他逻辑变量)显示"是"和"否",所以我执行此重新编码:

z <- ifelse(z == TRUE, "Yes", "No")
Run Code Online (Sandbox Code Playgroud)

有没有办法跳过这个额外的步骤,即定义zshow"Yes"而不是"TRUE"和"No"而不是"FALSE".

当然,我也可以这样做z <- ifelse(x == y, "Yes", "No"),但我仍然在寻找类似于options()我可以定义一次的函数内部的参数,并让它工作到脚本结束(或直到我重新定义参数).找不到类似的东西?options.

boolean r logical-operators

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

在xtables中显示零作为连字符

说我有一个像这样的knitr块:

library(xtable)

<<>>=
x <- matrix(c(0, 1, 2, 0, 4, 5))
xtable(x)
@
Run Code Online (Sandbox Code Playgroud)

产生以下LaTeX代码(摘录):

\hline
1 & 0,00 \\ 
2 & 1,00 \\ 
3 & 2,00 \\ 
4 & 0,00 \\ 
5 & 4,00 \\ 
6 & 5,00 \\ 
\hline
Run Code Online (Sandbox Code Playgroud)

但是,我的实际表格较大(12 x 6)并且有很多零,这使得发现非零非常重要.我想遵循本地表格格式指南,建议使用连字符作为整数零(而不是由近似产生的零).换句话说,我希望我的xtable()输出看起来像这样:

\hline
1 & - \\ 
2 & 1,00 \\ 
3 & 2,00 \\ 
4 & - \\ 
5 & 4,00 \\ 
6 & 5,00 \\ 
\hline
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?我已经研究过R options和knitr opts_chunk函数无济于事.

format r xtable knitr

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

如何以静默方式删除R中的文件

给出以下代码:

x <- 1
save(x, file = "x")
file.remove("x")
Run Code Online (Sandbox Code Playgroud)

file.remove()命令成功删除了x文件.但是,它返回TRUE到R控制台.我如何防止它这样做?

我尝试了类似的东西file.remove("x", silent = TRUE),但似乎无论我添加到函数中的是什么都被解释为文件名,因为上面的返回cannot remove file 'TRUE', reason 'No such file or directory'.

r

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

如何在R中自动化数据框命名?

假设我有以下数据框:

x <- data.frame(let = sample(LETTERS, 100, replace = T),
                num = sample(1:10, 100, replace = T))
Run Code Online (Sandbox Code Playgroud)

我想创建几个子集,x其中每个新数据帧的级别为x$let.到目前为止,我已经提出了这个简单的功能:

ss <- function(letra){
  return(subset(x, let == letra))
}
Run Code Online (Sandbox Code Playgroud)

这是非常简陋的,并没有按照我的意愿进行命名.我的问题是:我如何自动执行以下程序?

a <- ss('A')
b <- ss('B')
c <- ss('C')
...
z <- ss('Z')
Run Code Online (Sandbox Code Playgroud)

r function subset batch-processing

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