2011-09-19 102 views
3

我有一个for循环,它从一个数据框返回我使用哪个,which.min和which.max给出“坐标”的值。这里有一个例子使用具有索引的矩阵从数据框中选择多个值

df <- as.data.frame(matrix(rnorm(11284), nrow=403, ncol=28)) 
row <- matrix(data=c(1:403),nrow=403, ncol=1) 
col <- matrix(rnorm(403,14,3), nrow=403, ncol=1) 
col <- round(col, 0) 
coord <- cbind(row, col) 

Coord保存了我之前定义的标准的坐标。我现在想根据这些坐标从DF与提取相应的值环

for (i in 1:nrow(coord)) { 
print(df[coord[i,1], coord[i,2]]) 
} 

当我使用

output <- df[coord[i,1], coord[i,2]]) 

只给了我循环的最后一个表达式。我现在的一个简单问题是:我如何不仅存储此循环中的最后一个表达式,而且还存储了由打印给出的整个向量?

+0

欢迎来到SO。我将标题改为代表你的问题的东西。如果您不同意,请随时更换。另见[FAQ](http://stackoverflow.com/faq)。 –

回答

3

你很惊讶吗?您只将每个循环的循环的一个值存储在输出中。所以在最后一个循环之后,它只是最后一个值。正确的循环解决方案将是:

output <- vector(length=nrow(coord)) 
for (i in 1:nrow(coord)){ 
    output[i] <- df[coord[i,1],coord[i,2]] 
} 

但是,您不必使用循环。考虑到您在数据框或矩阵中有坐标,无论如何,这可以做得更简单:

output <- Df[coord] 

无需循环。

0

这听起来有点像OP之前使用SAS,在R变量中没有历史记录。在R中,不是逐行操作,而是尝试进行基于向量的计算,并使用apply将函数应用于向量或矩阵中的每个条目。在更有条件的情况下,您可以使用for循环并将返回值存储为其中的条目,然后一次返回或打印它们:

my <- function() { 
    outputs <- rep(0,20) 
    for(i in 1:20) { 
     outputs[i] <- i*i 
    } 
return(outputs) 
} 
相关问题