1

NList私は次のような数値ベクトルのリストを持っています

[[1]]
[1] 1959 9 4 62

[[2]]
[1] 2280  2  13

[[3]]
[1] 15 4  13

[[4]]
[1] 2902  178   13

構造は次のようなものです

list(c(1959, 13), c(2280, 178, 13), c(2612, 178, 13), c(2902, 
178, 13), c(2389, 178, 13), c(216, 736, 13), c(2337, 178, 13), 
    c(2639, 2126, 13), c(2924, 676, 178, 13), c(2416, 674, 178, 
    13), c(2223, 13), c(842, 178, 13), c(2618, 1570, 178, 13), 
    c(854, 178, 13), c(1847, 178, 13), c(2529, 178, 13), c(511, 
    178, 13), c(2221, 736, 13), c(415, 674, 178, 13), c(2438, 
    178, 13), c(2127, 178, 13), c(1910, 2126, 13), c(1904, 674, 
    178, 13), c(2310, 674, 178, 13), c(1732, 178, 13), c(1843, 
    178, 13), c(2539, 178, 13), c(1572, 676, 178, 13), c(1616, 
    876, 13).....)

このリストの数値ベクトルを繰り返したいのですが、次のように実行したいと思います。

  sum<- 0
  index<-1
  list1 <- apply(NList,1,function (i){
  #I want to get each of the numeric vector here
  row <- NList[i]

  #then I want to iterate the numeric vector for some calculation.
  #I am expecting, for [[1]], I get f(1959,9)+f(9,4)+f(4,62), in which f is my customized function, below I use a simple multiple as example
  for (j in (1:(length(row)-1)))
  {
    origin <- row[j]
    dest <- row[j+1]
    #a simple calculation example...I am expecting an array of sum which is the calculation result 
    sum[index] <- sum[index] + origin*dest
  }
  index <- index+1  

  })

しかし、それは機能せず、戻ります:

dim(X) must have a positive length

lapplyは私のために機能しておらず、合計を0として返します...

listR1 <- lapply(NList,function (i){
  row <- i
  for (j in 1:length(row))
  {origin <- row[j]
  dest <- row[j+1]
  sum[index] <- sum[index] + origin*dest
  }

  })

私は何か見落としてますか?これどうやってするの?
ありがとう!

4

2 に答える 2

3

私はあなたのapplyステートメントから関数を取り出して、もう少し詳しく見てみました。

    f=function(Row) 
    {
     Sum<- 0
      for (j in 1:(length(Row)-1)  )
      {
            Sum<- j + Row[j]*Row[j+1]
      }
     Sum    # returns the Sum
    }

次に、次のようにして各行に関数を適用できます。

  list1 <- lapply(NList,f)
于 2012-07-30T20:58:11.290 に答える
2

さて、このコードは機能します:

f=function(a,b) sum(a,b)

test.func=function (i){
  for (j in 1:(length(i)-1))
    ret.val[j]=f(i[j],i[j+1])  
  ret.val
}

# Use lapply for a list.
lapply(NList,test.func)

または、1行で実行できます。

lapply(NList,apply(seq_along(i)[-length(i)],function(x) f(i[x],i[x+1])))
于 2012-07-30T21:03:08.933 に答える