我尝试将所有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) 让下表:
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",但我想有一种更聪明的方法来实现这一点.
我从一个名为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个数据集并确定它们共享的值.谢谢,
我总是使用这样的命令:
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()功能方面遇到同样的问题,因此通用解决方案的额外吹嘘权利.
说我有以下数据框:
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) 我得出结论,R专家不太喜欢循环; 但是,作为一名前java程序员,这个事实对我来说有点苛刻.
我要动态地创建5个变量:x1,x2,x3,x4和x5并指定他们中的每一个随机值.
> 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)
这给出了一个错误.我究竟做错了什么?
我有以下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.
说我有一个像这样的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函数无济于事.
给出以下代码:
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'.
假设我有以下数据框:
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)