我想以下列方式生成随机字符串: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()但我无法理解.
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) 我可以完成这个任务,但我觉得必须有一个"最好的"(最简洁,最紧凑,最清晰的代码,最快?)的方式,到目前为止还没有弄清楚...
对于一组指定的分类因素,我想按组构建均值和方差表.
生成数据:
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/ …
你们中的一些人可能已经看过我关于这个主题的博客文章,在我想要帮助一个朋友在图表上生成半满的圆圈之后我编写了以下代码:
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符号网格):
它没有不同程度(即产生部分或完全填充点或空矩形的网格),无论是静默还是警告:
例如,尝试所有可用的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) 当使用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) 我想获得适合1M个独立数据集的线性回归斜率(对于data.frame为1M*50行,对于数组为1M*50).现在我正在使用这个lm()功能,这需要很长时间(大约10分钟).
线性回归有更快的功能吗?
我是R新手.
假设我有代码行
set.seed(123456)
Run Code Online (Sandbox Code Playgroud)
然后我想得到值123456所以我可以打印出来用于文档目的,如果需要在将来某个时候重新输入值.那我怎么得到那粒子?
请注意,我可以将上面的代码行注释掉,所以我实际上不会知道种子在123456处是什么.因此我需要r将当前种子的位置打印为单个整数,而不是列表626整数.
我很好奇如何list实现类型的对象.是吗
O(1),但访问项目是O(n).O(log(n))项目访问权限的树结构.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)