2

我正在使用函数 system.time() 并且我发现了一些令我惊讶的东西。我经常使用分配符号“=”而不是“<-”。我知道大多数 R 用户使用“<-”,但我认为“=”在我的代码中更清晰。因此,我使用“=”在函数 system.line() 中分配一个值,并出现以下错误消息:Error: unexpected '=' in "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!!!!

我发现:“=”和“<-”之间是否存在技术差异,这解释了我不能在函数中使用“=”进行分配,因为它是在函数中分配参数的符号。但我惊讶地发现它有时可以工作(见下面的代码)。

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

非常感谢你。埃德温。

4

2 回答 2

4

将您的代码用{ ... }大括号括起来,它将起作用:

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

?"<-"

运算符 <- 和 = 分配到评估它们的环境中。运算符 <- 可以在任何地方使用,而运算符 = 只允许在顶层(例如,在命令提示符下键入的完整表达式中)或作为表达式括号列表中的子表达式之一。

于 2012-11-19T17:12:38.530 回答
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),它也“有效”,但可能不符合您的意思!

于 2015-04-21T09:17:13.290 回答