[英]use object name in a loop
我正在合并一些存储在列表中的数据框。 为此,我使用带有.df
命令的for循环。 现在,我想将数据框的名称用作循环中paste
suffixes
。
有没有办法使用for ( .df in [list]) {
命令,我可以在.df
内减去.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
现在,我想使用这个循环,
for ( .df in a) {
print(['command I do not know about'])
}
然后让[我不知道的命令]打印出A,B,C(即.df
数据帧的.df
)。
我可以这样做吗?
这是我期望使用上面的简单循环从输出中得到的摘要,
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 ( .df in [list]) {
使用for ( .df in [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)
}
对于长向量,循环名称和提取值可能非常慢(时间复杂度为n ^ 2)。
不是for循环,而是适用于,但类似于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)
产量:
name a b
1 A 0.90139624 0.9739355
2 A 0.34311009 0.6621689
3 B 0.07585535 0.6010289
4 B 0.37292887 0.7260832
5 C 0.17814913 0.1433650
6 C 0.24586101 0.1741114
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.