我想制作一个循环,每次循环重复使用一个不同的变量。假设我有3个不同的变量:x,y和z:
x <- 1
y <- 2
z <- 3
我想对x,y和z执行相同的计算。我想乘以2:
B <- A*2
在每个循环之前,我希望将A设置为等于新变量。要做到这一点,很长的路要走就是手动将其全部写出:
A <- x
B <- A*2
A <- y
B <- A*2
A <- z
B <- A*2
我希望结果成为这种形式的向量。
C <- c(2,4,6)
我的计算和变量比这里显示的要长得多,因此手动将其写出会使我的代码非常混乱。我更喜欢使用循环,所以我只需要编写一次计算。
答案 0 :(得分:2)
通常,您可以通过将内容存储在列表中并从apply
系列调用函数来避免循环:
mylist <- list(x, y, z)
sapply(mylist, function(x) x*2)
请注意,如果您的变量位于数据框中,这将非常简单且有用:
df <- data.frame(x, y, z)
sapply(df, function(x) x*2)
答案 1 :(得分:0)
这是基本的R编程,可以用*apply
的形式解决。
首先将变量放入list
。
x <- 1
y <- 2
z <- 3
my_list <- list(x, y, z)
首先,我的评论中的mapply
。严格来说,不必分配新的功能,而只是使用{em>看起来类似于功能的功能f
。函数'*'
没有。
f <- `*` # assign the function '*' to function f
mapply(f, my_list, list(2))
#[1] 2 4 6
另一种方法是使用lapply
或sapply
。阅读帮助页面(这两种*apply
形式都是相同的。)
g <- function(v){
2*v
}
sapply(my_list, g)
#[1] 2 4 6
lapply(my_list, g)