R循环升序变量名

时间:2014-08-04 20:58:36

标签: r loops variables names

我试图在R中创建一个变量名称的循环。它应该做两个变量之和的平方根。到目前为止我有这个:

变量名是x1,y1,x2,y2,... x30,y30(全部在一个矩阵中,矩阵$ x1,矩阵$ x2)

x1 <- c(2,2,2,3,1,2,4,6,1)
y1 <- c(5,4,3,3,4,2,1,6,3)
x2 <- c(8,2,7,3,1,2,2,2,4)
y2 <- c(1,3,3,3,1,2,4,3,7)
x3 <- c(4,4,1,2,4,6,3,2,3)
y3 <- c(1,2,3,3,1,2,4,6,6)
matrix <- cbind(x1,y1,x2,y3,x3,y3)

for(i in 1:30){
    result[[i]]  <- sqrt(x`i' + y`i')
}

我该怎么办?

3 个答案:

答案 0 :(得分:1)

这是一个示例矩阵:

dat <- matrix(1:300, ncol = 60)
colnames(dat) <- paste0(rep(c("x", "y"), 30), rep(1:30, each = 2))

这是一个解决方案:

for (i in 1:30) {
  assign(paste0("result", i), sqrt( dat[, paste0("x", i)] + dat[, paste0("y", i)] ) )
  dat <- cbind(dat, get(paste0("result", i)))
}
colnames(dat)[61:90] <- paste0("result", 1:30)

答案 1 :(得分:1)

我不确定原始问题是什么样的,但您的代码现在看起来很好,除了您需要使用paste()构建变量名称和get()来获取它们。

 for(i in 1:30){
    result[[i]]  <- sqrt(get(paste('x',i,sep='')) + get(paste('y',i,sep='')))
 }

答案 2 :(得分:0)

好的,这种格式有点尴尬,但仍然可以管理。我们寻找具有当前&#39; i&#39;的列名。在他们的名下并计算他们的总和的平方。

result <- vector()
for (i in 1:3){
  result[i] <- sqrt(sum(matrix[,which(grepl(i,colnames(matrix)))]))
}

使用您的数据给出:

> result
[1] 7.348469 7.615773 7.549834