相当于让r中的表达式

时间:2018-01-12 14:38:24

标签: r

是否有一些等同于在r中表达let表达式?举个例子来看看这个简单的haskell代码:

MERGE (t:Tweet{tweet_id:{tweet_id}})
  ON CREATE SET 
    t.text={text}, 
    t.language={language}, 
    t.created_at={created_at}, 
    t.retweetcount={retweetcount}, 
    t.likecount={likecount}, 
    t.location={location}
  ON MATCH SET 
    t.retweetcount={retweetcount}, 
    t.likecount={likecount}

非常感谢提前。

4 个答案:

答案 0 :(得分:5)

一个等价物是lambda function,您可以在一个声明中定义和调用:

 RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

第一个(function(x) x+1)(x = 1) 部分定义一个函数,而第二个()部分调用该函数,为名为()的参数提供1的值。

答案 1 :(得分:3)

如果这样做的目的是使x仅在该表达式中可用,则环境可以提供此功能:

#make an environment
myenv <- new.env()

#assign 1 to variable x in our environment
myenv$x <- 1

#evaluate the expression within our environment
with(myenv, x + 1)
#[1] 2

#x only works within our created environment and not on the global environment 
#(i.e. the default environment when working on the console)
x + 1
#Error: object 'x' not found

根据@Roland的评论,这可以缩短为local({x <- 1; x + 1})。请参阅?local

答案 2 :(得分:2)

以下是一些:

x <- 100

# 1
with(list(x = 1), x + 1)
## [1] 2

# 2
local(x + 1, list(x = 1))
## [1] 2

# 2a
local({
  x <- 1
  x + 1
})
## [1] 2

# 3
eval(substitute(x + 1, list(x = 1)))
## [1] 2

# 4
library(wrapr)
let(c(x = "1"),
  x + 1,
  subsMethod = "stringsubs",
  strict = FALSE)
## [1] 2

x
## [1] 100

lambda.r包中还有一个open issue来添加let

答案 3 :(得分:0)

一个等价的函数是 lambda 函数,您可以使用 函数体内的隐式 local({ }) (这是@ArtemSokolov 答案的稍微改进的答案)。

(function() {
  x <- 1
  x + 1
})()

这相当于

local({
  x <- 1
  x + 1
})