R lappy函数以静默方式引用data.tables列表
我有一个data.tables列表,我想对每个data.table应用一个函数。我在lappy函数中设置了使用R lappy函数以静默方式引用data.tables列表,r,data.table,lapply,R,Data.table,Lapply,我有一个data.tables列表,我想对每个data.table应用一个函数。我在lappy函数中设置了使用:=。一切正常,我的输出通过引用更新,但我的函数也会打印到控制台。这是一个更大项目的一部分,将此步骤打印到控制台并不理想 如何在不打印的情况下“静默”运行此操作?是否有更好的方法来组织工作流/代码 dt1 <- data.table(a = rnorm(1:10), b = rnorm(1:10)) dt2 <- data.table(a = rnor
:=
。一切正常,我的输出通过引用更新,但我的函数也会打印到控制台。这是一个更大项目的一部分,将此步骤打印到控制台并不理想
如何在不打印的情况下“静默”运行此操作?是否有更好的方法来组织工作流/代码
dt1 <- data.table(a = rnorm(1:10),
b = rnorm(1:10))
dt2 <- data.table(a = rnorm(1:10),
b = rnorm(1:10))
dts <- list(dt1, dt2)
lapply(dts, function(dt) {
dt[, ':=' (c = a + b)]
})
dts
dt1We。可以使用walk
,它不会在控制台中打印任何内容
library(purrr)
walk(dts, ~ .x[, `:=`(c = a + b)])
dts
#[[1]]
# a b c
# 1: -0.1069952 0.1115983 0.004603111
# 2: 0.3228771 -0.8400846 -0.517207530
# 3: -1.6072728 -0.2727947 -1.880067477
# 4: 0.1715614 -0.3864995 -0.214938065
# 5: 1.8233350 -1.0786569 0.744678084
# 6: 0.2366026 -0.6166318 -0.380029253
# 7: 0.2373992 0.2251559 0.462555116
# 8: -0.1075611 -1.0418174 -1.149378504
# 9: 1.6742520 -0.5635583 1.110693774
#10: 2.4733842 2.1091365 4.582520731
#[[2]]
# a b c
# 1: -0.8332617 1.67201117 0.83874947
# 2: 1.3688393 1.12168046 2.49051974
# 3: 1.0208642 -1.18482073 -0.16395650
# 4: 0.6784662 2.15979872 2.83826493
# 5: -0.4351644 -0.04629453 -0.48145894
# 6: 1.3133550 -1.03423308 0.27912197
# 7: 1.0143396 -0.84787780 0.16646185
# 8: -0.9622108 0.92338456 -0.03882627
# 9: -0.3106202 1.08886031 0.77824008
#10: 0.7602507 -0.08996701 0.67028370
或者使用不可见
和重叠
invisible(lapply(dts, function(dt) {
dt[, ':=' (c = a + b)]
}))
您可以分配lappy
调用,该调用将抑制输出
dts <- lapply(dts, function(dt) {
dt[, ':=' (c = a + b)]
})
dts您可以使用for循环
for(dt in dts) dt[, ':='(c = a + b)]
使用集合:
for(i in seq_-along(dts))set(dts[[i]],j=“c”,value=dts[[i]]$a+dts[[i]]$b)
如果您想以静默方式执行此操作,请使用walk
是否可以分配@Matt Yes分配它以抑制输出。我是在避免@akrun,我的意思是在控制台上不打印的情况下以静默方式运行。我没有明确地询问如何在不指定变量的情况下执行此操作,我只是没有将代码设置为执行此操作。谢谢您的回复。我只是想澄清这个疑问。我想避免使用solution@Mxblsdl我还提供了一个base R
解决方案。我认为这是最简单的解决方案。虽然我没有进行过广泛的测试,但似乎没有任何性能差异。谢谢这也是一个好方法。我很少再对
循环使用,但有时它们是解决问题最直接的方法。