我试图在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')
}
我该怎么办?
答案 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