R循环升序变量名



我试图在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')
}

我能做什么?

下面是一个示例矩阵:

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)

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

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

好吧,这种格式有点笨拙,但仍然可以管理。我们查找名称中包含当前'i'的列名,并计算它们之和的平方根。

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

最新更新