R:保持For循环中生成的值

时间:2012-10-05 01:38:26

标签: r function vector for-loop

我提前为这个问题道歉,但我看起来很辛苦,但却找不到解决方案。

如何通过变量中的for循环生成值?

例如:

myfunction <- function(x=1:5) {
                for(i in 1:length(x)) {
                r<-x[i]
                }
                print(r)
              }

如果我运行上面的代码,我只得到x的最后一个值,在这种情况下为5.我明白这是因为我每次都通过for循环覆盖r。

我也试过了:

myfunction <- function(x=1:5) {
                for(i in 1:length(x)) {
                r[i]<-x[i]
                }
                print(r)
              }

但我仍然只是得到最后一个值。

我发现的唯一解决方案是在使用r&lt; -numeric(length)之前指定保存生成值的变量的长度:

myfunction <- function(x=1:5) {
                r<-numeric(5)
                for(i in 1:length(x)) {
                r[i]<-x[i]
                }
                print(r)
              }

但如果我不知道预先返回的矢量长度,这个解决方案显然是不够的。

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

你的循环只经过一次,而i = length(x)。你可能想要

for(i in seq(length(x))){
    # code here
}

# or

for(i in seq_along(x)){
    # code here
}

答案 1 :(得分:1)

您可以初始化长度为0的向量,然后将值附加到它。如果你有数以千计的文件,这将是低效的,只有几百个应该没问题。

myfunction <- function(){
    my_vector <- vector(mode = "numeric", length = 0)
    for( i in 1:400){
        x <- read.csv("my_file")    #add code to read csv file.
        #Say the file has two columns of data you want to compute the correlation
        temp_cor <- cor(x[,1], x[,2])
        my_vector <- c(my_vector, temp_cor)
    }
    return(my_vector)

}

R Inferno的第2章有关于成长向量的良好信息。

答案 2 :(得分:0)

malloc