小编Ben*_*ker的帖子

生成随机字符串

我想以下列方式生成随机字符串:ABCDE1234E,即每个字符串包含5个字符,4个数字,然后是1个字符.

我想出了一种使用以下代码创建它的方法.

library(random)
string_5 <- as.vector(randomStrings(n=5000, len=5, digits=FALSE, upperalpha=TRUE,
                        loweralpha=FALSE, unique=TRUE, check=TRUE))
number_4 <- as.vector(randomNumbers(n=5000, min=1111, max=9999, col=5, base=10, check=TRUE))
string_1 <- as.vector(randomStrings(n=5000, len=1, digits=FALSE, upperalpha=TRUE,
                         loweralpha=FALSE, unique=FALSE, check=TRUE))
PAN.Number <- paste(string_5,number_4,string_1,sep = "")
Run Code Online (Sandbox Code Playgroud)

但是这些功能需要很长时间,而且random库需要网络连接.

> system.time(string_5 <- as.vector(randomStrings(n=5000, len=5, digits=FALSE, upperalpha=TRUE,
+                                                 loweralpha=FALSE, unique=TRUE, check=TRUE)))
   user  system elapsed 
   0.07    0.00    3.18 
Run Code Online (Sandbox Code Playgroud)

有什么方法可以尝试减少执行时间吗?我也尝试过使用,sample()但我无法理解.

random r

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

将data.frame列更改为R中的行

A <- c(1,6)
B <- c(2,7)
C <- c(3,8)
D <- c(4,9)
E <- c(5,0)
df <- data.frame(A,B,C,D,E)
df
  A B C D E
1 1 2 3 4 5
2 6 7 8 9 0
Run Code Online (Sandbox Code Playgroud)

我想要这个:

df
   1  2
A  1  6 
B  2  7
C  3  8
D  4  9    
E  5  0
Run Code Online (Sandbox Code Playgroud)

r rows dataframe

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

快速/优雅的方法来构建均值/方差汇总表

我可以完成这个任务,但我觉得必须有一个"最好的"(最简洁,最紧凑,最清晰的代码,最快?)的方式,到目前为止还没有弄清楚...

对于一组指定的分类因素,我想按组构建均值和方差表.

生成数据:

set.seed(1001)
d <- expand.grid(f1=LETTERS[1:3],f2=letters[1:3],
                 f3=factor(as.character(as.roman(1:3))),rep=1:4)
d$y <- runif(nrow(d))
d$z <- rnorm(nrow(d))
Run Code Online (Sandbox Code Playgroud)

期望的输出:

  f1 f2  f3    y.mean      y.var
1  A  a   I 0.6502307 0.09537958
2  A  a  II 0.4876630 0.11079670
3  A  a III 0.3102926 0.20280568
4  A  b   I 0.3914084 0.05869310
5  A  b  II 0.5257355 0.21863126
6  A  b III 0.3356860 0.07943314
... etc. ...
Run Code Online (Sandbox Code Playgroud)

使用aggregate/ merge:

library(reshape)
m1 <- aggregate(y~f1*f2*f3,data=d,FUN=mean)
m2 <- aggregate(y~f1*f2*f3,data=d,FUN=var)
mvtab <- merge(rename(m1,c(y="y.mean")),
      rename(m2,c(y="y.var")))
Run Code Online (Sandbox Code Playgroud)

使用ddply/ …

aggregate r plyr reshape2

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

在R图形中使用Unicode'dingbat-like'字形,跨设备和平台,尤其是PDF

你们中的一些人可能已经看过我关于这个主题的博客文章,在我想要帮助一个朋友在图表上生成半满的圆圈之后我编写了以下代码:

TestUnicode <- function(start="25a0", end="25ff", ...)
  {
    nstart <- as.hexmode(start)
    nend <- as.hexmode(end)
    r <- nstart:nend
    s <- ceiling(sqrt(length(r)))
    par(pty="s")
    plot(c(-1,(s)), c(-1,(s)), type="n", xlab="", ylab="",
         xaxs="i", yaxs="i")
    grid(s+1, s+1, lty=1)
    for(i in seq(r)) {
      try(points(i%%s, i%/%s, pch=-1*r[i],...))
    }
  }

TestUnicode(9500,9900) 
Run Code Online (Sandbox Code Playgroud)

这是有效的(即产生一个几乎完整的酷dingbatty符号网格):

  • 在Ubuntu 10.04上,在X11或PNG设备中
  • 在Mandriva Linux发行版上,安装了pango-devel的相同设备,带有本地构建的R

它没有不同程度(即产生部分或完全填充点或空矩形的网格),无论是静默还是警告:

  • 在PDF或PostScript的同一台Ubuntu 10.04机器上(尝试设置font ="NimbusSan"使用URW字体,没有帮助)
  • 在MacOS X.6上(石英,X11,开罗,PDF)

例如,尝试所有可用的PDF字体系列:

flist <- c("AvantGarde", "Bookman","Courier", "Helvetica", "Helvetica-Narrow",
        "NewCenturySchoolbook", "Palatino", "Times","URWGothic",
        "URWBookman", "NimbusMon", "NimbusSan", "NimbusSanCond",
        "CenturySch", "URWPalladio","NimbusRom")

for (f in flist) {
  fn <- paste("utest_",f,".pdf",sep="")
  pdf(fn,family=f)
  TestUnicode()
  title(main=f) …
Run Code Online (Sandbox Code Playgroud)

pdf unicode graphics r

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

如何更改警告设置?

我正在尝试调试一个函数.我想在它们出现时显示警告,但我不明白如何更改警告设置.

warnings r options

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

生成具有固定均值和sd的随机数

当使用rnorm(或runif等)在R中生成随机数时,它们很少具有精确的均值和SD作为它们的采样分布.是否有任何简单的一线或二线为我这样做?作为一个初步的解决方案,我已经创建了这个函数,但它似乎应该是R或某个包的本机.

# Draw sample from normal distribution with guaranteed fixed mean and sd
rnorm_fixed = function(n, mu=0, sigma=1) {
  x = rnorm(n)  # from standard normal distribution
  x = sigma * x / sd(x)  # scale to desired SD
  x = x - mean(x) + mu  # center around desired mean
  return(x)
}
Run Code Online (Sandbox Code Playgroud)

为了显示:

x = rnorm(n=20, mean=5, sd=10)
mean(x)  # is e.g. 6.813...
sd(x)  # is e.g. 10.222...

x = rnorm_fixed(n=20, mean=5, sd=10)
mean(x)  # …
Run Code Online (Sandbox Code Playgroud)

random r mean standard-deviation

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

是否有更快的lm功能

我想获得适合1M个独立数据集的线性回归斜率(对于data.frame为1M*50行,对于数组为1M*50).现在我正在使用这个lm()功能,这需要很长时间(大约10分钟).

线性回归有更快的功能吗?

r lm

20
推荐指数
4
解决办法
7041
查看次数

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

打印当前随机种子,以便稍后可以使用set.seed()输入它

我是R新手.

假设我有代码行

set.seed(123456)
Run Code Online (Sandbox Code Playgroud)

然后我想得到值123456所以我可以打印出来用于文档目的,如果需要在将来某个时候重新输入值.那我怎么得到那粒子?

请注意,我可以将上面的代码行注释掉,所以我实际上不会知道种子在123456处是什么.因此我需要r将当前种子的位置打印为单个整数,而不是列表626整数.

random r

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

列表的内部实现是什么?

我很好奇如何list实现类型的对象.是吗

  1. 一个动态矢量,当它满时会自动增加它的大小.
  2. 附加项目的链接列表O(1),但访问项目是O(n).
  3. 具有O(log(n))项目访问权限的树结构.
  4. 具有O(1)项目访问权限的哈希表.

我很好奇,因为列表可以有键值对,使它们看起来像哈希表,但元素是有序的,看起来像一个向量.

编辑:因为length(list(runif(1e4)))是1,所以当将元素追加到列表时,它看起来像每次复制整个列表,这使得它非常慢:

但访问速度比矢量慢得多:

z1 <- runif(1e4)
system.time({
  for(i in 1:10000) z1[[1 + i]] <- 1
})
Run Code Online (Sandbox Code Playgroud)

输出:

user  system elapsed 
0.060   0.000   0.062 
Run Code Online (Sandbox Code Playgroud)

但:

z1 <- list(runif(1e4))
system.time({
  for(i in 1:10000) z1[[1 + i]] <- 1
})
Run Code Online (Sandbox Code Playgroud)

输出:

user  system elapsed 
1.31    0.00    1.31 
Run Code Online (Sandbox Code Playgroud)

初始化包含10000个元素的列表:

z1 <- as.list(runif(1e4))
system.time({
  for(i in 1:10000) z1[[1 + i]] <- 1
})
Run Code Online (Sandbox Code Playgroud)

输出:

user  system elapsed …
Run Code Online (Sandbox Code Playgroud)

r list

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