首页 > 解决方案 > R中打印语句的评估顺序

问题描述

我不确定print(or message, cat) 函数的惰性求值是如何工作的。例如:

func1 <- function(i) print("first")
func2 <- function(i) print("second")

1 %>%
  func1() %>%
  func2()
[1] "second"

即只执行第二个打印语句。

但是,如果我在每个函数中执行一个操作

func3 <- function(i) {
  print("first")
  i + 1
}

func4 <- function(i) {
  print("second")
  i * 2
}

1 %>%
  func3() %>%
  func4()
[1] "second"
[1] "first"
[1] 4

然后print语句向后出现,但操作i以正确的顺序发生 ( (1+1)*2=4)。

如果我将 in 合并i到 print 语句中,一切都会按顺序出现:

func5 <- function(i) {
  print(paste("first", i))
  i + 1
}

func6 <- function(i) {
  print(paste("second", i))
  i * 2
}

1 %>%
  func5() %>%
  func6()
[1] "first 1"
[1] "second 2"
[1] 4

这里发生了什么?如何强制打印语句以正确的顺序执行?阅读惰性评估时,我发现人们使用该force函数,但将print语句包装在其中似乎并没有改变任何东西。

任何帮助将非常感激 :)

标签: r

解决方案


推荐阅读