为什么不将此行打印到控制台?

时间:2019-08-25 00:03:02

标签: r

我正在编写一个用于随机游走的函数,但我意识到只有当我指定“ print”时,才通过键入其名称来打印变量。所关注的变量称为“ this”。

rwalk = function(k) {
  this = sample(c(1,-1),k,TRUE,c(0.5,0.5))
  this
  x = append(c(0),cumsum(t))
  x
}

上面,仅打印x的值。

rwalk = function(k) {
  this = sample(c(1,-1),k,TRUE,c(0.5,0.5))
  print(this)
  x = append(c(0),cumsum(t))
  x
}


在此同时打印两个值。为什么会这样?

2 个答案:

答案 0 :(得分:0)

我猜您在运行^/proj/trunk时没有将输出分配给变量

rwalk

因此rwalk(3) 返回到全局环境并打印,因为它没有分配给变量。这是R的行为。在全局环境中,键入x等效于x。但是print(x)处于函数this的环境中。除非程序员明确声明,否则没有理由打印它。这就是您使用rwalk所做的。

如果将输出分配给变量,则不会打印任何内容。

print(this)

要点是,函数结尾之前的最后x <- rwalk(3) 不会打印任何内容。它指出该函数返回x。只有在函数外部,才返回该值。

答案 1 :(得分:0)

在没有任何类型的return语句的情况下,默认情况下,函数仅返回输出的最后一行,并且一次只能返回一个对象。如果您运行类似

rwalk = function(k) {
  this = sample(c(1,-1),k,TRUE,c(0.5,0.5))
  return(this)
  x = append(c(0),cumsum(t))
  x
}

然后将仅返回this。如果您想实际获得this作为输出(而不仅仅是打印它),则需要使用x将其放在列表中。

rwalk = function(k) {
  this = sample(c(1,-1),k,TRUE,c(0.5,0.5))
  x = append(c(0),cumsum(t))
  list(this, x)
}