0

事前にこの質問をお詫び申し上げますが、私はかなり一生懸命見ていて、解決策を見つけることができませんでした。

変数の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 <-numeric(length)を使用する前に、生成された値を保持する変数の長さを指定することです。

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

しかし、事前に返されるベクトルの長さがわからない場合、このソリューションは明らかに不十分です。

助けてくれてありがとう!

4

3 に答える 3

2

ループは1回だけ通過し、i = length(x)になります。あなたはおそらくしたい

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

# or

for(i in seq_along(x)){
    # code here
}
于 2012-10-05T01:44:37.207 に答える
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章には、成長するベクトルに関する優れた情報があります。

于 2012-10-05T12:15:13.800 に答える
0
holder <- c()#generating empty vector
x <- (1:5) #generting somthing to loop

for (i in seq_along(x)){ #loop through x
     holder <- c(holder,i*2)#and put it into holder
  }

print(holder)
于 2017-03-01T04:43:16.210 に答える