我有一个简单的功能如下
strange_function <- function(s, e) {
for (i in s : e) {
for (j in i - s + 1 : i) {
print(c(i,j))
}
}
return
}
使用
调用此函数时strange_function(2,10)
我注意到前几个输出为
[1] 2 1
[1] 2 2
[1] 3 2
[1] 3 3
[1] 3 4
最后一个显然是错误的。这是一个错误吗? 感谢
答案 0 :(得分:3)
在R终端试试这个:
> 3-2+1:3
[1] 2 3 4
您可以看到它正在做的是首先创建一个向量1:3
,然后添加3
并将2
减去每个元素。我怀疑你想要的是(i-s+1):i
您还可以通过多种方式简化此代码,例如:
strange_function <- function(s, e) {
i<-rep(s:e,each=2)
j<-c(s-1,rep(s:(e-1),each=2),e)
print(data.frame(i,j))
}
对于大型载体,此方法也明显更快。例如strange_function(2,1000)
:
我的版本:
user system elapsed
0.024 0.007 0.031
您的版本(带有固定括号):
user system elapsed
0.146 0.046 0.207
答案 1 :(得分:0)
你想要一些带有j循环的括号吗?这条线
for (j in i - s + 1 : i)
应为for (j in (i - s + 1) : i)
strange_function <- function(s, e) {
for (i in s : e) {
for (j in (i - s + 1) : i) {
print(c(i,j))
}
}
}
> strange_function(2,10)
[1] 2 1
[1] 2 2
[1] 3 2
[1] 3 3
[1] 4 3
[1] 4 4
[1] 5 4
[1] 5 5
[1] 6 5
[1] 6 6
[1] 7 6
[1] 7 7
[1] 8 7
[1] 8 8
[1] 9 8
[1] 9 9
[1] 10 9
[1] 10 10