保存for循环的结果

保存for循环的结果,r,for-loop,R,For Loop,我在保存for循环的结果时遇到问题,可能犯了一个非常基本的错误。我尝试使用for循环从两列中提取第一个字母,如果其中任何一列是T,则为'foraging'的'trail.type'赋值,否则为'interest'赋值。下面的代码可以做到这一点,但是当我查看每个数据帧时,该列还没有被添加。有人知道为什么会这样吗 我正在使用的代码: dfs <- Filter(function(x) is(x, "data.frame"), mget(ls())) for (name in dfs){

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

我正在使用的代码:

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
}

如果我们有数据帧列表,我们可以使用
lappy
。对于每个列表,我们检查
from
to
列是否以字母
T
开头,并在此基础上将值分配给新列
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

lst1请提供一个可复制的示例?尝试
name$trail.type您的代码对我有效:
trail.type
添加到
name
?@Phil是的,它是
name
中的一个新列。对不起,我应该说得更清楚。dfs是数据帧的列表。因此,脚本通过名称添加trail.type作为列来遍历所有数据帧。但是,当循环完成时,我只有一个名为name的数据帧,它来自添加了trail.type的循环中的最后一个数据帧,但是列表中没有一个数据帧添加了列added.Perfect。非常感谢,这正是我想要它做的。我真的应该学习如何使用Lappy mapply等。
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