簡體   English   中英

在循環中使用對象名稱

[英]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 )。

我可以這樣做嗎?

PDT更新2012-04-28 20:11:58

這是我期望使用上面的簡單循環從輸出中得到的摘要,

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM