如何使用R语言中的冒号运算符满足我的需求?

5

R的“:”运算符有一些众所周知的陷阱:

a = c(1, 2, 3)
set.zero = function(n) a[1:n] <<- 0
set.zero(0)
# `a` is now c(0, 2, 3)

我可以编写一个函数来解决这个问题,使得1:0产生一个空向量。但是我希望有一个相对简洁的基础库或CRAN包提供这样的功能(最好能替换:而不会太危险)。我已经尝试查找过了,但没有找到类似的东西。
请问这样的东西是否存在?
1个回答

6

试试这个:

set.zero = function(n) a[seq_len(n)] <<- 0

请注意,seq(1, length = n) 同样可用。

不错。虽然需要算术来推广到 a:b - Owen
1
@Owen 算术?!太可怕了!太可怕了!;) - joran
@Owen,已经添加了一些关于那个的信息。 - G. Grothendieck
1
@Brandon Bertelsen - <<- 在全局范围内设置一个变量(<- 仅在本地设置它);在这种情况下,我不确定是否有必要。 - ChrisW
@Brandon @ChrisW 这是必要的,因为 a 对于函数 set.zero 来说是非局部的。 - Owen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接