Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.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
R 如何将函数应用于多个数据集第1列至第10列?_R_For Loop - Fatal编程技术网

R 如何将函数应用于多个数据集第1列至第10列?

R 如何将函数应用于多个数据集第1列至第10列?,r,for-loop,R,For Loop,新手问题: 我想使用上限函数来取整10个训练数据集中的y变量,从训练1到训练10 > for (i in 1:10){ x <- get(paste0("train",i)); x$y <- ceiling(x$y) } 但如果我尝试这样做: > head(x$y) [1] 29562 0 0 4661 772 440 > head(x$Fold) [1] 10 10 10 10 10 10 结果表明,代码工作正常,但仅在重命名的数据集

新手问题:

我想使用上限函数来取整10个训练数据集中的y变量,从训练1到训练10

> for (i in 1:10){ x <- get(paste0("train",i)); x$y <- ceiling(x$y) }
但如果我尝试这样做:

> head(x$y)
[1] 29562     0     0  4661   772   440
> head(x$Fold)
[1] 10 10 10 10 10 10
结果表明,代码工作正常,但仅在重命名的数据集“x”上工作,该数据集在每次循环后被覆盖,而不是数据集train1-train10


我做错了什么?

最好将数据集保存在“列表”中。但是,如果要更新全局环境中的数据对象,一个选项是
list2env
。我们使用
mget
获取列表中的“数据集”,使用
lappy
循环“列表”,并创建一个新变量“y”,使用
list2env
更新数据对象

list2env(lapply(mget(paste0('train', 1:10)), function(x) {
           x$y <- ceiling(x$y)
            x}), envir=.GlobalEnv)
数据
或者。。。但这很糟糕

for (i in 1:2) {
 tmp =data.frame(x=get(paste0("train",i))$x,y=ceiling(get(paste0("train",i))$y));
 assign(paste0("train",i), tmp)
} 

这也行,谢谢kwicher。因此,我认为使用for循环是一种不好的形式-循环是否比lappy函数使用更多的内存或执行时间?我也是begginer,几天前我问了几乎完全相同的问题,请参见此处的讨论:
for(i in 1:10) {
     assign(paste0('train', i), `[[<-`(get(paste0('train', i)), 'y', 
               value= ceiling(get(paste0('train', i))$y)),
       envir=.GlobalEnv)}
head(train1,3)
#  y
#1 0
#2 1
#3 1
set.seed(24)
list2env(setNames(lapply(1:10, function(i) 
    data.frame(y= rnorm(5))), paste0('train', 1:10)), envir=.GlobalEnv)
for (i in 1:2) {
 tmp =data.frame(x=get(paste0("train",i))$x,y=ceiling(get(paste0("train",i))$y));
 assign(paste0("train",i), tmp)
}