【问题标题】:R columns of data frame in a list in a for statementfor语句中列表中数据框的R列
【发布时间】:2017-02-17 02:11:23
【问题描述】:

我有多个格式相同、列名相同等的 .csv 文件。

我想对列进行一些操作,然后在每个 for 循环之后返回操作。这是一些可重复的代码:

df1 <- data.frame(x= (0:9), y= (10:19))
df2 <- data.frame(x= (20:29), y=(30:39))

listy <- list(df1, df2)

avg <- 0

filenames<- c("df1", "df2")
filenumbers<-seq(listy)
b <- 0
for(filenumber in filenumbers){ b <- b+1
allDM <- as.data.frame(filenames[filenumber],
                                header=TRUE)
allDM <- data.frame(
  pred= filenames[filenumber]$x,
  actual= filenames[filenumber]$y
)

allDM$pa <- allDM$pred-allDM$actual

avg <- mean(allDM$pa)

return(avg)

}

在这里使用 $ 函数并不愉快。

错误是:文件名错误[filenumber]$x: $ 运算符对原子向量无效

干杯,

【问题讨论】:

    标签: r list for-loop dataframe


    【解决方案1】:

    filenames[filenumber]

    只是一个(原子)字符对象,即

    [1] "df1"
    

    [1] "df2"
    

    因此在其上使用$ 是没有意义的。

    您可以使用get() 解决此问题:

    for(filenumber in filenumbers){ 
    
      b <- b + 1
    
      allDM <- as.data.frame(filenames[filenumber],
                             header=TRUE)
      tmp <- get(filenames[filenumber]) 
    
      allDM <- data.frame(
        pred   = tmp$x,
        actual = tmp$y
      )
    
      allDM$pa <- allDM$pred-allDM$actual
      avg      <- mean(allDM$pa)
    
    
    }
    

    请注意,我还去掉了return(avg),因为这不是一个函数,所以你不能使用return(),但无论如何你都不需要。 avg 仍然会被创建。

    【讨论】:

    • 谢谢 Hack-R!我想从 for 循环中获取 avg 和其他一些操作,并创建一个包含这些变量和 row = each for 语句的数据库。我假设这样做的唯一方法是创建一个函数并返回?
    猜你喜欢
    • 2021-02-07
    • 2020-09-28
    • 2012-01-18
    • 1970-01-01
    • 2015-12-16
    • 2022-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多