Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.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 lappy函数以静默方式引用data.tables列表_R_Data.table_Lapply - Fatal编程技术网

R lappy函数以静默方式引用data.tables列表

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

我有一个data.tables列表,我想对每个data.table应用一个函数。我在lappy函数中设置了使用
:=
。一切正常,我的输出通过引用更新,但我的函数也会打印到控制台。这是一个更大项目的一部分,将此步骤打印到控制台并不理想

如何在不打印的情况下“静默”运行此操作?是否有更好的方法来组织工作流/代码

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
解决方案。我认为这是最简单的解决方案。虽然我没有进行过广泛的测试,但似乎没有任何性能差异。谢谢这也是一个好方法。我很少再对
循环使用
,但有时它们是解决问题最直接的方法。