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(或者在您的例子中是循环)来实现这一点