我试图在R中创建一个循环,允许我在循环中更改对象的值。 下面是一个简单的例子来指出我的意思。 Print(x)代表相当广泛的代码,其中某些计算需要x的值。然而,虽然解决方案#1在纸上工作,但它在此上下文中不可用(因为子循环)。有没有办法在R中设计一个类似于解决方案#2的循环?非常感谢提前!
1> x <- 1
2> while (x == 1)
3> {
4> print(x)
5> x <- 2
6> print(x)
7> x <- 3
8> print(x)
9> x <- 4
10> print(x)
11> if (x == 4)
12> break
13> }
输出 1 2 3 4
1> x <- 1
2> while (x == 1 || x == 2 || x == 3 || x == 4)
3> {
4> print (x)
5> x <- 2
#jump to line 2, ignore line 5, proceed with line 6
6> x <- 3
#jump to line 2, ignore line 6, proceed with line 7
7> x <- 4
#jump to line 2, ignore line 7, proceed with line 8
8> if (x == 4)
9> break
10> }
输出 1 2 3 4
答案 0 :(得分:1)
要说出你想做什么有点难,但我也会给出一个机会。所以你首先可能想要编写一个取值为x
的函数并根据x
的值进行计算(就我从你的例子中得到的那样,计算/循环不是所有x
)都相同。
x <- 1:4
fct <- function(x) {
if (x==1){
y <- x^2
}
if (x==2) {
y <- x + 2
}
if (x>2 & x < 5) {
y <- x*3 + 4
}
return(y)
}
现在循环x
:
sapply(x, fct)
这就是你想要的吗?
答案 1 :(得分:0)
我不确定它会起作用,因为它不清楚你想要做什么,但是你可以尝试将所有要运行的值放入矢量中吗? ?像这样:
my_values <- c(1,2,3,4)
for(x in my_values) {
print(x)
}
编辑:
我可能完全无用,但你是否也从RODBC获得了下一把钥匙?如果是这种情况,假设您可以使用功能get_next_key
获取下一个密钥,并使用get_data
获取数据。如果没有更多的密钥(即你之前有最后一个密钥),我还假设get_next_key
返回NA
。那会有用吗?
x = 1
while(!is.na(get_next_key(x))) {
data = get_data(x)
print(data)
x = get_next_key(x)
}
答案 2 :(得分:0)
这首先明显只适用于x的整数增量:
x <- 1
while (x <= 4){
print(x)
x <- x+1
}
对于x的任意值:
x1 <- c(1, 2, 3, 4)
### index x1 and move along this;
### at each step assign the value to y1 then
### do something with (print) it
for (i in seq_along(x1)) print(y1 <- x1[i])
这里的for
循环没有什么问题,有时比apply
更容易阅读