我在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))
答案 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创建
<<-
在父环境而不是函数环境中修改df
。 df
被修改为调用函数的副作用,而不是直接由函数返回,这会使调试时的生活变得困难。但是,使用循环可以清楚地表明函数返回修改后的数据帧时发生了什么。