小编Das*_*son的帖子

简洁地同时分配名称和值

我发现自己经常写下以下两行.有简洁的替代方案吗?

      newObj  <- vals
names(newObj) <- nams

# This works, but is ugly and not necessarily preferred
'names<-'(newObj <- vals, nams)
Run Code Online (Sandbox Code Playgroud)

我正在寻找类似的东西(当然这不起作用):

newObj <- c(nams = vals)
Run Code Online (Sandbox Code Playgroud)

将它包装在一个函数中也是一个选项,但我想知道功能是否已经存在.

样本数据

vals <- c(1, 2, 3)
nams <- c("A", "B", "C") 
Run Code Online (Sandbox Code Playgroud)

r assign

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

可以写在前一行吗?

我正在使用R,我想写一些使用cat放在控制台上的文本.如果文本在当前行上使用退格符(\ b),则很容易.例:

> cat("A cat says ruff\b\b\b\bmeow")
A cat says meow> 
Run Code Online (Sandbox Code Playgroud)

但是,如果有换行符,我不知道如何回到上一行.使用具有退格字符的cat似乎不会撤消换行符.

> cat("A cat says ruff\n\b\b\b\b\bmeow")
A cat says ruff
meow> 
Run Code Online (Sandbox Code Playgroud)

或者,如果有一个包允许你分配控制台的一部分,只是修改那里的内容也适合我.我从来没有直接在linux中使用ncurses,但我的理解是我希望有一些类似于ncurses提供的功能.谢谢你的时间!

编辑:我将补充说,我不一定只需要修改控制台的某个部分 - 如果唯一的解决方案是分配整个控制台,这对我正在尝试做的很好.

编辑2:提供了一个tty控制台的解决方案.我现在对如果可以在Windows中使用RGui执行此操作感兴趣.

r

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

如何找到二进制文件的长度

我有一个大小=2 的二进制文件。但我想将所有数据读入一个向量,但我不知道如何找到该二进制数据的总长度。

f <- file("a.bin", "rb")
readBin(f, integer(), size = 2, n = ??)
Run Code Online (Sandbox Code Playgroud)

binary r

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

ar(1) 非零均值模拟

我似乎找不到正确的方法来模拟平均值不为零的 AR(1) 时间序列。我需要 53 个数据点,rho = .8,平均值 = 300。

但是,arima.sim(list(order=c(1,0,0), ar=.8), n=53, mean=300, sd=21) 给了我 1500 年代的值。例如:

1480.099 1480.518 1501.794 1509.464 1499.965 1489.545 1482.367 1505.103(以此类推)

我也试过, arima.sim(n=52, model=list(ar=c(.8)), start.innov=300, n.start=1) 但它只是像这样倒计时:

238.81775870 190.19203239 151.91292491 122.09682547 96.27074057 [6] 77.17105923 63.15148491 50.04211711 39.68465916 32.46837830 24.78357345 21.27437183 15.93486092 13.40199333 10.99762449 8.70208879 5.62264196 3.15086491 2.13809323 1.30009732

我试过arima.sim(list(order=c(1,0,0), ar=.8), n=53,sd=21) + 300这似乎给出了正确的答案。例如:

280.6420 247.3219 292.4309 289.8923 261.5347 279.6198 290.6622 295.0501 264.4233 273.8532 261.9590 278.0217 300.6825 291.4469 291.5964 293.5710 285.0330 274.5732 285.2396 298.0211 …

r time-series autoregressive-models

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

R中\ <和\>的意外不对称正则表达式行为

让我用下面的例子来说明.

str = "we are friends"
Run Code Online (Sandbox Code Playgroud)

帮助文档说明了这一点

符号\ <和\>匹配单词开头和结尾的空字符串.

因此,预计会发生以下情况,其中在每个单词的末尾添加一个空格.

gsub("\\>"," ", str)
[1] "we  are  friends "
Run Code Online (Sandbox Code Playgroud)

但是,为什么它在使用时不起作用

gsub("\\<"," ", str)
[1] " w e  a r e  f r i e n d s"
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么会这样吗?如果我想在每个单词的前面添加额外的空格,我需要做什么?

regex r

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

是否可以将R作为守护程序运行

我在R中有一个脚本,白天经常被其他脚本调用。我在终端中使用

Rscript code.R
Run Code Online (Sandbox Code Playgroud)

我注意到加载程序包和设置R需要很多时间。

是否可以将R作为后台服务运行,而我是使用端口或其他工具访问的?

daemon r

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

在R中向量化rep和seq

我想完成两件事.首先,如果我有一个向量,1:5我想得到一个矩阵(或两个向量),表示这些元素的唯一组合,包括两倍相同的数字,但不包括重复.

现在我可以使用矩阵来做到这一点:

foo <- matrix(1:5,5,5)
cbind(foo[upper.tri(foo,diag=TRUE)],foo[lower.tri(foo,diag=TRUE)])
      [,1] [,2]
 [1,]    1    1
 [2,]    1    2
 [3,]    2    3
 [4,]    1    4
 [5,]    2    5
 [6,]    3    2
 [7,]    1    3
 [8,]    2    4
 [9,]    3    5
[10,]    4    3
[11,]    1    4
[12,]    2    5
[13,]    3    4
[14,]    4    5
[15,]    5    5
Run Code Online (Sandbox Code Playgroud)

但必须有一个更简单的方法.我试图用Vectorizeseq,但是这给了我一个错误:

cbind(Vectorize(seq,"from")(1:5,5),Vectorize(seq,"to")(5,1:5))
    Error in Vectorize(seq, "from") : 
      must specify formal argument names to vectorize
Run Code Online (Sandbox Code Playgroud)

我要做的第二件事是如果我有一个包含向量的列表bar,以获得一个包含重复列表元素的向量,该向量等于该元素中元素的数量.我可以这样做:

unlist(apply(rbind(1:length(bar),sapply(bar,length)),2,function(x)rep(x[1],x[2])))
 [1] 1 1 …
Run Code Online (Sandbox Code Playgroud)

r vectorization seq

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

R:正常表达'没有跟着'不工作

我需要保留括号中的单词并删除以下字符串中的其他单词.

(A(B(C)d)(E)F)

所以我的期望是(((c))(e)).要删除a,b,d,f,我尝试了"未遵循"正则表达式.

str <- "(a(b(c)d)(e)f)"
gsub("([a-z]+)(?!\\))", "", str) #(sub. anything that isn't followed by a ")" ) 
Run Code Online (Sandbox Code Playgroud)

该消息显示我的正则表达式无效.正如我所看到的,正则表达式"(?!\))"第二部分中的括号不匹配.至于我的编辑器,第一个"("与紧随其后的")匹配",这并不意味着是一个闭包(右边的那个).我可以从我的正则表达式中弄清楚这个错误.你能告诉我实际上有什么问题吗?有没有其他方法可以做到这一点?

regex r

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

如何使用IF语句分配NA?

我想对0到1之间的值向量进行分类.值低于.001,值高于.10或不感兴趣.因此,我希望这些范围内的值为NA.

当我运行下面的代码时,我收到一个警告:

Error in if (x[i] > 0.001 & x[i] <= 0.01) x[i] = 0.01 :  missing value where TRUE/FALSE needed
Run Code Online (Sandbox Code Playgroud)

如何修复代码?

for (i in 1:length(x))
  {
    if (x[i] <= .001)
      x[i] = NA
    if (x[i] > .001 & x[i] <= .01)
      x[i] = .01
    if (x[i] > .01 & x[i] <= .02)
      x[i] = .02
    if (x[i] > .02 & x[i] <= .03)
      x[i] = .03
    if (x[i] > .03 & x[i] <= .04)
      x[i] = .04
    if (x[i] …
Run Code Online (Sandbox Code Playgroud)

if-statement r na

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

在R中嬉戏,怎么用?

我是一名C++程序员,我是R的新手.有人告诉我在R中使用for循环是一个坏主意,并且最好使用它sapply.我写了下面的代码来计算生日巧合的概率:

prob <- 1           # prob of no coincidence
days <- 365 
k <- 50             # how many people
probability <- numeric()  #probability vector (empty right now)
for(i in 1:k){
    prob <- (days - i + 1)/days * prob # Formula for no coincidence
    probability[i] <- 1 - prob
}
Run Code Online (Sandbox Code Playgroud)

我怎么能做同样的事情sapply?我想做的事情如下:

1 - sapply(1:length(m), function(x) prod(m[1:x]))
Run Code Online (Sandbox Code Playgroud)

但如何使用这个公式生日没有巧合?

r sapply

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