函数system.time()中=和< - 运算符之间的区别

时间:2012-11-19 17:04:18

标签: r assignment-operator

我正在使用函数system.time(),我发现了令我惊讶的东西。我经常使用分配符号“=”而不是“< - ”。我知道大多数R用户使用“< - ”但我认为“=”在我的代码中更清晰。因此,我使用“=”在函数system.line()中分配值,并出现以下错误消息:错误:意外' ='在" system.time(a [,1] ="

以下是代码:

a = matrix(1, nrow = 10000)

require(stats)
system.time(a[,1] = a[,1]*2) #this line doesn't work 
#Error: unexpected '=' in "system.time(a[,1] ="
system.time(a[,1] = a[,1]*2) #this line works
system.time(for(i in 1:100){a[,1] = a[,1]*i}) #this line works!!!!

我发现:Is there a technical difference between "=" and "<-"解释了我不能在函数中使用“=”来分配,因为它是在函数中赋值参数的符号。但我很惊讶地看到它有时可以工作(参见下面的代码)。

有谁知道它为什么在这里工作? (也就是为什么它在第一种情况下不起作用,因为我猜,[,1]不是函数system.time()的参数...)

非常感谢你。 埃德。

2 个答案:

答案 0 :(得分:4)

将代码包裹在{ ... }大括号中,它将起作用:

system.time({a[,1] = a[,1]*2})
   user  system elapsed 
      0       0       0 

来自?"<-"

  

运算符&lt; - 和=分配到它们所在的环境中   评估。运算符&lt; - 可以在任何地方使用,而运算符   =仅允许在顶层(例如,在命令提示符下键入的完整表达式中)或作为其中一个子表达式   支撑表达式列表。

答案 1 :(得分:1)

system.time(a[,1] = a[,1]*2)中,等号不代表赋值,它被解释为试图绑定“命名参数”;但system.time没有该名称的参数。

system.time(for(i in 1:100){a[,1] = a[,1]*i})中,等号确实在做作业;这很好。

如果你写了system.time(a[,1] <- a[,1]*2)<-只能意味着赋值,而不是参数绑定,而且它有效!

但要注意!如果你写了system.time(a[,1] < - a[,1]*2),它也“有用”,但可能不符合你的意思!