Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在循环中处理A1、A2、…、a等变量?在R_R_Loops - Fatal编程技术网

如何在循环中处理A1、A2、…、a等变量?在R

如何在循环中处理A1、A2、…、a等变量?在R,r,loops,R,Loops,我有10个不同的对象:a1,a2。。。a10。 我所需要做的就是对每个变量做一个简单的更改。 比如 a1$x这不起作用,因为不能通过迭代器i替换名称的一部分来调用对象。如果要进行迭代,必须首先将对象分组到一个对象中,如列表或data.frame。根据您的代码,我推断a对象是data.frames,因此这里最合理的做法是将它们存储在列表中 a1 <- data.frame(x = 1:10) a2 <- data.frame(x = 11:15) a3 <- data.frame

我有10个不同的对象:a1,a2。。。a10。 我所需要做的就是对每个变量做一个简单的更改。 比如


a1$x这不起作用,因为不能通过迭代器
i
替换名称的一部分来调用对象。如果要进行迭代,必须首先将对象分组到一个对象中,如
列表
data.frame
。根据您的代码,我推断a对象是data.frames,因此这里最合理的做法是将它们存储在
列表中

a1 <- data.frame(x = 1:10)
a2 <- data.frame(x = 11:15)
a3 <- data.frame(x = 16:30)

a_list <- list(a1, a2, a3)

for(i in 1:length(a_list)){
  a_list[[i]]$x <- a_list[[i]]$x + 1
  a_list[[i]]$x_new <- cumsum(a_list[[i]]$x)
}
如果您的数据帧具有完全相同的结构,则更方便的做法是将所有数据帧绑定到一个数据帧,并添加一个id列,该行从该数据帧生成。然后使用
dplyr
对其进行更改

library(dplyr)
a_df <- rbind(a1 %>% mutate(df = 1), a2 %>% mutate(df = 2), a3 %>%  mutate(df = 3))
a_df %>% mutate(x = x + 1) %>% group_by(df) %>% mutate(x_new = cumsum(x))
库(dplyr)
a_df%突变(df=1),a2%>%突变(df=2),a3%>%突变(df=3))
a_df%%>%突变(x=x+1)%%>%group_by(df)%%>%突变(x_new=cumsum(x))

如果使用
eval()
函数读取对象,使用
assign()
函数写入对象,则无需首先将对象转换为单个列表或数据帧,即可使用循环方法。例如:

a1 <- data.frame(x=1:5)
a2 <- data.frame(x=2:6)
a3 <- data.frame(x=3:7)

for(i in 1:3) {
  dfname <- paste0("a", i)
  df <- eval(parse(text=dfname))
  df$new_x <- cumprod(df$x)
  assign(dfname, df)
}

a1

a1使用
lappy(列表(a1,a2,…,a10),函数(x)x+1)
r没有数组吗?是的,它有数组,什么类型的对象是
a1,a2…
?非常感谢。这是我真正需要的答案。谢谢你的回答!我也会试试你的代码:)
a1 <- data.frame(x = 1:10)
a2 <- data.frame(x = 11:15)
a3 <- data.frame(x = 16:30)

a_list <- list(a1, a2, a3)

for(i in 1:length(a_list)){
  a_list[[i]]$x <- a_list[[i]]$x + 1
  a_list[[i]]$x_new <- cumsum(a_list[[i]]$x)
}
a_list <- list(a1, a2, a3)

lapply(a_list, function(df) {
  df$x <- df$x + 1
  df$x_new <- cumsum(df$x)
  return(df)
})
library(dplyr)
a_df <- rbind(a1 %>% mutate(df = 1), a2 %>% mutate(df = 2), a3 %>%  mutate(df = 3))
a_df %>% mutate(x = x + 1) %>% group_by(df) %>% mutate(x_new = cumsum(x))
a1 <- data.frame(x=1:5)
a2 <- data.frame(x=2:6)
a3 <- data.frame(x=3:7)

for(i in 1:3) {
  dfname <- paste0("a", i)
  df <- eval(parse(text=dfname))
  df$new_x <- cumprod(df$x)
  assign(dfname, df)
}

a1