更改循环以覆盖R中的数据帧

时间:2019-02-26 12:02:23

标签: r

我在R中有一个数据帧,并对其应用了一个函数,以便它返回另一个数据帧,并依次使用不同的输入来执行此操作。一种方法如下:

output_df <- df %>% 
    modify_df(input_1) %>% 
    modify_df(input_2) %>% 
    modify_df(input_3) %>% 
    modify_df(input_4)

这不是很可扩展,我想以一种更具编程性的方式来做。 我想我也可以做类似的事情:

for(input in input_list){
  output_df <- modify_df(output_df, input)
}

但是我不喜欢在R中进行循环。这种替代方法行得通吗?

output_df <- lapply(input, function(x) modify_df(output_df, x))

1 个答案:

答案 0 :(得分:1)

可以这样做(请参见下面的示例,该示例将数据帧简单地乘以一系列数字–在这种情况下,1:5是我的输入向量),但是在这种情况下,我希望循环。

df <- data.frame(A = 1:5, B = 6:10)

modify_df <- function(input){
  df <<- df * input
}

invisible(lapply(1:5, modify_df))

print(df)
#>     A    B
#> 1 120  720
#> 2 240  840
#> 3 360  960
#> 4 480 1080
#> 5 600 1200

reprex package(v0.2.1)于2019-02-26创建


针对下面的评论

<<-在父环境而不是函数环境中修改dfdf被修改为调用函数的副作用,而不是直接由函数返回,这会使调试时的生活变得困难。但是,使用循环可以清楚地表明函数返回修改后的数据帧时发生了什么。