小编qoh*_*eth的帖子

按名称重命名多个列

有人应该已经问过这个,但我找不到答案.说我有:

x = data.frame(q=1,w=2,e=3, ...and many many columns...)  
Run Code Online (Sandbox Code Playgroud)

将我不一定知道的位置的任意子列重命名为其他任意名称的最优雅方法是什么?

例如说我要重新命名"q""e""A""B",什么是最优雅的代码来做到这一点?

显然,我可以做一个循环:

oldnames = c("q","e")
newnames = c("A","B")
for(i in 1:2) names(x)[names(x) == oldnames[i]] = newnames[i]
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有更好的方法?也许使用一些包?(plyr::rename等)

r rename dataframe r-faq

63
推荐指数
10
解决办法
13万
查看次数

R:对非计算机科学家的选项(表达式=)的解释

我写了一个表单的递归函数

foo=function(vars,i=2){
  **do something with vars**
  if(i==length(vars)){
    return(**something**)
  }else{
    foo(vars,i+1)
  }
}
Run Code Online (Sandbox Code Playgroud)

length(vars) 是1500左右.当我执行它时,我得到了错误

Error: evaluation nested too deeply: infinite recursion / options(expressions=)?
Error during wrapup: evaluation nested too deeply: infinite recursion / options(expressions=)?
Run Code Online (Sandbox Code Playgroud)

很公平,所以我增加了

options(expressions=10000)
Run Code Online (Sandbox Code Playgroud)

然后它工作.

但是,当我读到的帮助文档options有关expressions=,我只是不明白它在说什么.此外,它表明

...如果你增加它,你可能还想用更大的保护堆启动R; ...

所以有人可以告诉我发生了什么,如果我应该expressions像我一样增加参数,以及我是否应该修改其他内容.

stack-overflow recursion r

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

如何用解析变量打印函数体

假设我有一个函数,它接受一些参数k并返回另一个带参数nk在函数体中使用的函数.

makeFn <- function(k) {
  function(n){
    rep(k,n)
  }
}

five <- makeFn(5)

five(3)
# [1] 5 5 5

body(five)
# {
#    rep(k, n)
# }
Run Code Online (Sandbox Code Playgroud)

我怎样才能打印出five它所显示的身体rep(5,n)而不是rep(k,n)

functional-programming r

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

knitr 用中文编译文档

我尝试编译 YiHui 的 BIG5示例(带有中文内容的 knitr)。我使用了 Mac OSX snowleopard、最新的 RStudio、pdfLatex(结果与 XeLatex 相同)。这是原始 .Rnw 的摘录

\begin{document}
\title{knitr???????}
\author{???}

??????????????

<<test>>=
1+1 # ????
'??????'
rnorm(5)
(function(){
paste('??????')
})()
@
Run Code Online (Sandbox Code Playgroud)

使用系统默认编码“UTF-8”,生成的 pdf 是

1+1 #
## [1] 2
''
## [1] ""
rnorm(5)
## [1] -0.4290 1.8835 -0.7045 -0.9232 1.5433
(function(){ paste('') })()
## [1] ""
Run Code Online (Sandbox Code Playgroud)

如您所见,中文只是空白区域。然后我用 BIG5 编码保存了 .Rnw 并再次编译。生成的pdf变成:

AyyCHUNXaH
1+1 # F
## [1] 2
'H'
## [1] "H"
rnorm(5)
## [1] -0.27859 -0.79428 -0.76903 0.40313 -0.07851
(function(){ …
Run Code Online (Sandbox Code Playgroud)

r character-encoding knitr chinese-locale

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

R如何生成随机但易于反转的矩阵

我有一个很难R做的计算,我可以选择2台计算机,叫做V和L,来运行代码.V应该比L快,但我没有遇到过这种情况.所以我决定测试一下.

作为一个简单的测试,我决定让他们倒转3000*3000的matrice 500次,然后记录时间.

set.seed(123)
I=500
n=3000
time=matrix(NA,ncol=3,nrow=I)
for(i in 1:I){
t0<-proc.time()
x<-solve(matrix(runif(n^2),n))
mt1<-proc.time()
time[i,]<-(mt1-t0)[1:3]
}
Run Code Online (Sandbox Code Playgroud)

问题是在特定的迭代期间,它被卡住了.我不知道为什么,但我怀疑是因为生成的矩阵接近奇异.所以我想改进代码.我可以想到三种方式:

  1. 确保生成的矩阵易于反转.但是我该如何强制执行?当然,任何解决方案都需要在计算上便宜,否则练习变得毫无意义.
  2. R如果solve花费太长时间,请跳过该迭代?但同样,我该怎么做?
  3. 为他们分配一个不同的计算任务,任何建议?

performance benchmarking r

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