Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在循环中使用对象名_R_List_Loops_For Loop_Dataframe - Fatal编程技术网

R 在循环中使用对象名

R 在循环中使用对象名,r,list,loops,for-loop,dataframe,R,List,Loops,For Loop,Dataframe,我正在合并一些存储在列表中的数据帧。为此,我使用了带有.df命令的For循环。现在,我想在循环内的粘贴中使用数据帧的名称作为后缀 有没有一种方法,使用for(.df in[list]){命令,我可以减去循环中当前.df中的数据帧的名称 假设这个列表有三个数据帧 a <- list(A = data.frame(a=runif(2), b=runif(2)), B = data.frame(a=runif(2), b=runif(2)), C =

我正在合并一些存储在列表中的数据帧。为此,我使用了带有
.df
命令的For循环。现在,我想在循环内的
粘贴中使用数据帧的名称作为
后缀

有没有一种方法,使用
for(.df in[list]){
命令,我可以减去循环中当前
.df
中的数据帧的名称

假设这个列表有三个数据帧

a <- list(A = data.frame(a=runif(2), b=runif(2)), 
          B = data.frame(a=runif(2), b=runif(2)), 
          C = data.frame(a=runif(2), b=runif(2)))
a

$A
          a         b
1 0.2833226 0.6242624
2 0.1741420 0.1707722

$B
           a         b
1 0.55073381 0.6082305
2 0.08678421 0.5192457

$C
           a         b
1 0.02788030 0.1392156
2 0.02171247 0.7189846
然后让[我不知道的命令]打印出A、B、C(即
.df
中数据帧的名称)

我可以这样做吗

更新时间:2012-04-28 20:11:58 PDT 下面是我使用上面的简单循环从我的输出中得到的一个片段

for ( .df in a) {
 print(['command I do not know about'](a))
                }

[1] "A"
[1] "B"
[1] "C"
我可以使用

for (x in names(a)) {
    print(x)
    }

但是由于我正在做的事情的性质,我想在我的for循环中使用
for(.df in[list]){
命令。

不是for循环,而是lappy,但它的工作方式与for循环类似。也许这会有所帮助,尽管我很困惑,因为我认为mrdwab的答案就是它

FUN <-function(i){
    x <- a[[i]]
    data.frame(name=rep(names(a)[[i]], nrow(x)), x)
}

LIST <- lapply(seq_along(a), FUN)

do.call("rbind", LIST)

不是for循环,而是lappy,但其工作原理与for循环类似。虽然我感到困惑,但这可能会有所帮助,因为我认为mrdwab的答案就是它

FUN <-function(i){
    x <- a[[i]]
    data.frame(name=rep(names(a)[[i]], nrow(x)), x)
}

LIST <- lapply(seq_along(a), FUN)

do.call("rbind", LIST)

要同时提取名称和值,您不能在值上循环。您可以在索引或名称上循环:

# Loop over indices (faster, more cumbersome)
ns <- names(a)
for(i in seq_along(a)) {
   v <- a[[i]]     # extract value
   n <- ns[[i]]    # extract name
   cat(n, ": \n")
   str(v)
}

# Loop over names (easy but slower)
for(n in names(a)) {
   v <- a[[n]]     # extract value
   cat(n, ": \n")
   str(v)
}
#循环索引(更快、更麻烦)

ns要提取名称和值,您不能在值上循环。您可以在索引或名称上循环:

# Loop over indices (faster, more cumbersome)
ns <- names(a)
for(i in seq_along(a)) {
   v <- a[[i]]     # extract value
   n <- ns[[i]]    # extract name
   cat(n, ": \n")
   str(v)
}

# Loop over names (easy but slower)
for(n in names(a)) {
   v <- a[[n]]     # extract value
   cat(n, ": \n")
   str(v)
}
#循环索引(更快、更麻烦)

ns使用
表示名称(a)中的(nm){print(nm);.df=a[[nm]}
?@MartinMorgan,谢谢你回答我的问题,但我正在寻找一种方法,当数据帧存储在
.df
元素中时,可以减去循环中的名称。很抱歉,在我最初的问题中没有说得更具体。减去名称意味着什么?你能添加一段预期输出吗?@Chase,谢谢r不放弃我的问题。我在输出中添加了一个小的更新,其中包含我想要的内容。请让我知道这是否有用。基本上,答案是…名称不见了。循环变量在传递到循环中时是一个未命名的数据帧。正如新英格兰桥梁被冲毁时所说的那样。。“寻找替代路线”。使用
for(nm in names(a)){print(nm);.df=a[[nm]]}
?@MartinMorgan,谢谢你回答我的问题,但我正在寻找一种方法,当数据帧存储在
.df
元素中时,可以减去循环中的名称。很抱歉,在我最初的问题中没有说得更具体。减去名称意味着什么?你能添加一段预期输出吗?@Chase,谢谢r不放弃我的问题。我在输出中添加了一个小的更新,其中包含我想要的内容。请让我知道这是否有用。基本上,答案是……名称不见了。循环变量在传递到循环中时是一个未命名的数据帧。正如新英格兰桥梁被冲毁时所说的那样……”你看到我的更新了吗?问题是我想坚持使用
for(.df in[list]){
循环结构,但“简单地”减去循环中数据帧的名称。我的更新是否有助于解释我在寻找什么?如果没有,我将进行新的更新,这将是我的全部问题。我不是在寻找合并任何内容的帮助,我是在
.df
过程中/内部寻找元素sores名称的帮助循环。我在这里通过将索引传递给lappy(或者在你的例子中是循环)来实现这一点。你看到我的更新了吗?问题是我想坚持使用
for(.df in[list]){
循环结构,但“简单地”减去循环中数据帧的名称。我的更新是否有助于解释我在寻找什么?如果没有,我将进行新的更新,这将是我的全部问题。我不是在寻找合并任何内容的帮助,我是在
.df
过程中/内部寻找元素sores名称的帮助我在这里通过将索引传递给lappy(或者在您的例子中是循环)来实现这一点