add <- c( 2,3,4)
for (i in add){
a <- i +3
b <- a + 3
z <- a + b
print(z)
}
# Result
[1] 13
[1] 15
[1] 17
在R中,它可以打印结果,但我想在结果,数据框或列表中保存结果以进一步计算
提前致谢
答案 0 :(得分:2)
尝试类似:
add <- c(2, 3, 4)
z <- rep(0, length(add))
idx = 1
for(i in add) {
a <- i + 3
b <- a + 3
z[idx] <- a + b
idx <- idx + 1
}
print(z)
答案 1 :(得分:2)
这是一个简单的代数,根本不需要for循环
res <- (add + 3)*2 + 3
res
## [1] 13 15 17
或者如果您想要data.frame
data.frame(a = add + 3, b = add + 6, c = (add + 3)*2 + 3)
# a b c
# 1 5 8 13
# 2 6 9 15
# 3 7 10 17
虽然一般情况下,当你尝试这样的东西时,最好创建一个函数,例如
myfunc <- function(x) {
a <- x + 3
b <- a + 3
z <- a + b
z
}
myfunc(add)
## [1] 13 15 17
如果实际需要循环(与您的示例不同)并且您希望存储其结果,则最好使用*apply
系列来执行此类任务。例如,如果要返回列表,请使用lapply
res <- lapply(add, myfunc)
res
# [[1]]
# [1] 13
#
# [[2]]
# [1] 15
#
# [[3]]
# [1] 17
如果您想要回传
,请使用sapply
res <- sapply(add, myfunc)
res
## [1] 13 15 17
答案 2 :(得分:1)
使data.frame保留所有信息
add <- c( 2,3,4)
results <- data.frame()
for (i in add){
a <- i +3
b <- a + 3
z <- a + b
#print(z)
results <- rbind(results, cbind(a,b,z))
}
results
a b z
1 5 8 13
2 6 9 15
3 7 10 17
如果您只想要z,那么使用矢量,不需要列表
add <- c( 2,3,4)
results <- vector()
for (i in add){
a <- i +3
b <- a + 3
z <- a + b
#print(z)
results <- c(results, z)
}
results
[1] 13 15 17
答案 3 :(得分:0)
将这两个结果与@dugar的结果进行比较可能是有益的:
> sapply(add, function(x) c(a=x+3, b=a+3, z=a+b) )
[,1] [,2] [,3]
a 5 6 7
b 10 10 10
z 17 17 17
这是懒惰评估的结果,有时在使用中间值计算时会让我们失望。下一个应该给出更多预期的结果:
> sapply(add, function(x) c(a=x+3, b=(x+3)+3, z=(x+3)+((x+3)+3)) )
[,1] [,2] [,3]
a 5 6 7
b 8 9 10
z 13 15 17
这些结果是@dugar的转置。使用sapply
或lapply
通常可以省去设置第0个案例对象然后递增计数器的工作。
> lapply(add, function(x) c(a=x+3, b=(x+3)+3, z=(x+3)+((x+3)+3)) )
[[1]]
a b z
5 8 13
[[2]]
a b z
6 9 15
[[3]]
a b z
7 10 17