for循环中的函数名称不起作用R

时间:2018-09-06 14:34:40

标签: r

我有一组data.frame,具有相同的列尺寸,但行数不同。

DATA.FRAME.A
Column_A     Column_B     Column_C     Column_D      Column_E
2001-02-20      10           11           5              8

DATA.FRAME_B
Column_F     Column_G      Column_W    Column_T      Column_Q
2008-08-7        50           21          10             50

DATA.FRAME_C
Column_H     Column_J      Column_K    Column_S      Column_P
2001-02-02      13           15           61             7

我的目的是使所有data.frame的第一行都相同

我写这个周期是为了使我的代码简单。

t <- list(DATA.FRAME_A, DATA.FRAME_B, DATA.FRAME_C)
for (i in t ) {
  names[i] <- c("Data", "Open", "Max", "Minimun", "Close")
   }

R不会给我任何类型的错误。

哪里错了?

我想要这些结果

DATA.FRAME.A
   Data        Open          Max       Minimun      Close
2001-02-20      10           11           5              8

DATA.FRAME_B
 Data           Open          Max       Minimun      Close
2008-08-7        50           21          10             50

DATA.FRAME_C
 Data          Open          Max       Minimun      Close
2001-02-02      13           15           61             7

先谢谢了。

弗朗切斯科

4 个答案:

答案 0 :(得分:2)

考虑lapply,它是 apply 系列的一部分,它们是有用的迭代函数,它们返回与输入相同数量的元素,并且在您的情况下可以返回修改后的数据框元素。甚至认为setNames()是返回命名对象的右手函数。

t <- list(DATA.FRAME_A, DATA.FRAME_B, DATA.FRAME_C)

# ITERATE THROUGH EACH DF OF t, RENAMING COLUMNS, RETURNING MODIFIED DF
new_t <- lapply(t, function(i) setNames(i, c("Data", "Open", "Max", "Minimun", "Close"))

 # RESULTS
lapply(new_t, head)

答案 1 :(得分:0)

尝试一下:

t <- c("DATA.FRAME.A", "DATA.FRAME.B", "DATA.FRAME.C")
for (i in 1:length(t)) {
    names(get(t[i])) <- c("Data", "Open", "Max", "Minimun", "Close")
}

答案 2 :(得分:0)

根据您编写的代码,循环变量unlock()将是列表std::mutex m; { std::lock_guard lock(m); // Everything here is mutex-protected. } // Here you are guaranteed the std::mutex is released. 的各个项(不是列表中的 index ,而是列表中的每个项)项目本身)。另外,i为此将更加简单。编写此循环的更好方法是:

t

答案 3 :(得分:0)

在R中子列表的子设置需要两个方括号

t <- list(DATA.FRAME_A, DATA.FRAME_B, DATA.FRAME_C)
for (i in seq_along(t) ) {
  names(t[[i]]) <- c("Data", "Open", "Max", "Minimun", "Close")
 }

您所做的不是错误,您可以在for循环中修改i,但是i是为for循环创建的临时变量,并且在每次迭代后都会被销毁,而不是修改列表