在for循环内找不到列表?

时间:2018-09-08 23:58:05

标签: r list for-loop

我正在编写以下函数:

for (i in 1:272){
  gh[[i]]<- c(df[i, 1],df[i, 2])}
  

错误:找不到对象“ gh”

这是为什么?为什么会出现此错误?而我该如何纠正呢?

具有以下数据结构:

 data.frame':   272 obs. of  2 variables:
 $ V1: Factor w/ 17 levels "exp_var_nocorr_1",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ V2: Factor w/ 17 levels "exp_var_nocorr_1",..: 2 3 4 5 6 7 8 9 10 11 ...

或者这个,只是为了更加直观,这里我有前33行:

     V1                V2
1    exp_var_nocorr_1 exp_var_nocorr_10
2    exp_var_nocorr_1 exp_var_nocorr_11
3    exp_var_nocorr_1 exp_var_nocorr_12
4    exp_var_nocorr_1 exp_var_nocorr_13
5    exp_var_nocorr_1 exp_var_nocorr_14
6    exp_var_nocorr_1 exp_var_nocorr_15
7    exp_var_nocorr_1 exp_var_nocorr_16
8    exp_var_nocorr_1 exp_var_nocorr_17
9    exp_var_nocorr_1  exp_var_nocorr_2
10   exp_var_nocorr_1  exp_var_nocorr_3
11   exp_var_nocorr_1  exp_var_nocorr_4
12   exp_var_nocorr_1  exp_var_nocorr_5
13   exp_var_nocorr_1  exp_var_nocorr_6
14   exp_var_nocorr_1  exp_var_nocorr_7
15   exp_var_nocorr_1  exp_var_nocorr_8
16   exp_var_nocorr_1  exp_var_nocorr_9
17  exp_var_nocorr_10  exp_var_nocorr_1
18  exp_var_nocorr_10 exp_var_nocorr_11
19  exp_var_nocorr_10 exp_var_nocorr_12
20  exp_var_nocorr_10 exp_var_nocorr_13
21  exp_var_nocorr_10 exp_var_nocorr_14
22  exp_var_nocorr_10 exp_var_nocorr_15
23  exp_var_nocorr_10 exp_var_nocorr_16
24  exp_var_nocorr_10 exp_var_nocorr_17
25  exp_var_nocorr_10  exp_var_nocorr_2
26  exp_var_nocorr_10  exp_var_nocorr_3
27  exp_var_nocorr_10  exp_var_nocorr_4
28  exp_var_nocorr_10  exp_var_nocorr_5
29  exp_var_nocorr_10  exp_var_nocorr_6
30  exp_var_nocorr_10  exp_var_nocorr_7
31  exp_var_nocorr_10  exp_var_nocorr_8
32  exp_var_nocorr_10  exp_var_nocorr_9
33  exp_var_nocorr_11  exp_var_nocorr_1

dput结果:

structure(list(V1 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L), .Label = c("exp_var_nocorr_1", 
"exp_var_nocorr_10", "exp_var_nocorr_11"), class = "factor"), 
    V2 = structure(c(2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 
    12L, 13L, 14L, 15L, 16L, 17L, 1L, 3L, 4L, 5L, 6L, 7L, 8L, 
    9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 1L), .Label = c("exp_var_nocorr_1", 
    "exp_var_nocorr_10", "exp_var_nocorr_11", "exp_var_nocorr_12", 
    "exp_var_nocorr_13", "exp_var_nocorr_14", "exp_var_nocorr_15", 
    "exp_var_nocorr_16", "exp_var_nocorr_17", "exp_var_nocorr_2", 
    "exp_var_nocorr_3", "exp_var_nocorr_4", "exp_var_nocorr_5", 
    "exp_var_nocorr_6", "exp_var_nocorr_7", "exp_var_nocorr_8", 
    "exp_var_nocorr_9"), class = "factor")), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", 
"14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", 
"25", "26", "27", "28", "29", "30", "31", "32", "33"))

1 个答案:

答案 0 :(得分:1)

在访问元素之前未分配gh列表的代码存在问题。首先,在需要访问列表元素之前,请对其进行初始化,请参见下面的代码:

set.seed(123)

smpl <- structure(list(V1 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L), .Label = c("exp_var_nocorr_1", 
"exp_var_nocorr_10", "exp_var_nocorr_11"), class = "factor"), 
    V2 = structure(c(2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 
    12L, 13L, 14L, 15L, 16L, 17L, 1L, 3L, 4L, 5L, 6L, 7L, 8L, 
    9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 1L), .Label = c("exp_var_nocorr_1", 
    "exp_var_nocorr_10", "exp_var_nocorr_11", "exp_var_nocorr_12", 
    "exp_var_nocorr_13", "exp_var_nocorr_14", "exp_var_nocorr_15", 
    "exp_var_nocorr_16", "exp_var_nocorr_17", "exp_var_nocorr_2", 
    "exp_var_nocorr_3", "exp_var_nocorr_4", "exp_var_nocorr_5", 
    "exp_var_nocorr_6", "exp_var_nocorr_7", "exp_var_nocorr_8", 
    "exp_var_nocorr_9"), class = "factor")), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", 
"14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", 
"25", "26", "27", "28", "29", "30", "31", "32", "33"))

# data.simulation
df <- smpl[sample(33, 272, replace = TRUE), ]

# list memory allocation
gh <- lapply(1:272, function(x)c("", ""))

# fill-in gh
for (i in 1:272){
  gh[[i]] <-c(df[i, 1],df[i, 2])}

gh[1:5]

输出:

[[1]]
[1] "exp_var_nocorr_1" "exp_var_nocorr_3"

[[2]]
[1] "exp_var_nocorr_10" "exp_var_nocorr_4" 

[[3]]
[1] "exp_var_nocorr_1" "exp_var_nocorr_7"

[[4]]
[1] "exp_var_nocorr_10" "exp_var_nocorr_7" 

[[5]]
[1] "exp_var_nocorr_10" "exp_var_nocorr_9"