从for循环中保存结果

时间:2017-01-10 09:56:14

标签: r for-loop

我遇到了从for循环中保存结果的问题,我可能犯了一个非常基本的错误。我试图使用for循环来获取两列中的第一个字母,如果其中任何一个是T,则为'foraging'的'trail.type'赋值,否则给出'internest'的值。下面的代码可以做到这一点,但是当我查看每个数据帧时,该列尚未添加。有谁知道为什么会这样?

我正在使用的代码:

dfs <- Filter(function(x) is(x, "data.frame"), mget(ls()))

for (name in dfs){
  name$fromf<-substr(name$from,1,1)
  name$tof<-substr(name$to,1,1)
  name$trail.type <- ifelse(name$fromf=='T', "foraging",
                                   ifelse(name$tof=='T', "foraging",
                                          'internest'))
  name$fromf <- NULL
  name$tof <- NULL
}

我正在使用的数据:

from to strength
N1   N2   1.67
N1   T1   1.11
N2   N3   0.67
N3   N4   1.00
N3   N5   0.29
N5   N6   5.00

1 个答案:

答案 0 :(得分:2)

好吧,如果我们有数据框列表,我们可以使用from。对于每个列表,我们会检查toT列是否以字母trail.type开头,并根据我们将值分配给新列lapply(lst1, function(x) cbind(x, trail.type = ifelse(grepl("^T", x[["from"]]) | grepl("^T", x[["to"]]), "foraging", "internest")))

lst1

其中lst1 <- list(name, name) lapply(lst1, function(x) cbind(x, trail.type = ifelse(grepl("^T", x[["from"]]) | grepl("^T", x[["to"]]), "foraging", "internest"))) #[[1]] # from to strength trail.type #1 N1 N2 1.67 internest #2 N1 T1 1.11 foraging #3 N2 N3 0.67 internest #4 N3 N4 1.00 internest #5 N3 N5 0.29 internest #6 N5 N6 5.00 internest #[[2]] # from to strength trail.type #1 N1 N2 1.67 internest #2 N1 T1 1.11 foraging #3 N2 N3 0.67 internest #4 N3 N4 1.00 internest #5 N3 N5 0.29 internest #6 N5 N6 5.00 internest 是您的数据框列表。

例如,

{{1}}