我正在使用函数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()的参数...)
非常感谢你。 埃德。
答案 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)
,它也“有用”,但可能不符合你的意思!