我发现自己经常写下以下两行.有简洁的替代方案吗?
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,我想写一些使用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执行此操作感兴趣.
我有一个大小=2 的二进制文件。但我想将所有数据读入一个向量,但我不知道如何找到该二进制数据的总长度。
f <- file("a.bin", "rb")
readBin(f, integer(), size = 2, n = ??)
Run Code Online (Sandbox Code Playgroud) 我似乎找不到正确的方法来模拟平均值不为零的 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 …
让我用下面的例子来说明.
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)
有人可以解释为什么会这样吗?如果我想在每个单词的前面添加额外的空格,我需要做什么?
我在R中有一个脚本,白天经常被其他脚本调用。我在终端中使用
Rscript code.R
Run Code Online (Sandbox Code Playgroud)
我注意到加载程序包和设置R需要很多时间。
是否可以将R作为后台服务运行,而我是使用端口或其他工具访问的?
我想完成两件事.首先,如果我有一个向量,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)
但必须有一个更简单的方法.我试图用Vectorize
的seq
,但是这给了我一个错误:
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) 我需要保留括号中的单词并删除以下字符串中的其他单词.
(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)
该消息显示我的正则表达式无效.正如我所看到的,正则表达式"(?!\))"第二部分中的括号不匹配.至于我的编辑器,第一个"("与紧随其后的")匹配",这并不意味着是一个闭包(右边的那个).我可以从我的正则表达式中弄清楚这个错误.你能告诉我实际上有什么问题吗?有没有其他方法可以做到这一点?
我想对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) 我是一名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 ×10
regex ×2
assign ×1
binary ×1
daemon ×1
if-statement ×1
na ×1
sapply ×1
seq ×1
time-series ×1