1 个解决方案
#1
出于对某种赋值方式的偏好,也逐渐出现了等号党和箭头党,但到底孰好孰坏,显然争不出任何结果,相对来说更重要的倒是了解这两者的区别。在大部分情况下,两者等价,但是需要注意以下区别:
(1) 等号只能单向赋值,例如x = 10; 箭头符号可以双向赋值,即x<-10与10->x等价
(2) 在函数中赋值(参数传递)只能使用"=", 尽管使用"<-"也不会报错,在R会忽略指定的赋值对象,转而赋值给默认顺序中该位置的参数,例如构造矩阵中,
> matrix(1:6,ncol<-3)
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
> matrix(1:6,ncol=3)
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
事实上第一条命令等价于 matrix(1:6,3) , 因为在默认的参数排序中nrow排在ncol之前,从而将数字3赋值给了nrow.
(3)除函数内参数赋值外,能用"="等地方一定能用"<-",但反过来则不一定,譬如 system.time(A<-matrix(1:6,3))不能替换为等号。
当然除了上述两种赋值方式外,还有一种赋值方式"<<-"也偶尔在R编程运用到,表示给上一层环境中的变量赋值
(1) 等号只能单向赋值,例如x = 10; 箭头符号可以双向赋值,即x<-10与10->x等价
(2) 在函数中赋值(参数传递)只能使用"=", 尽管使用"<-"也不会报错,在R会忽略指定的赋值对象,转而赋值给默认顺序中该位置的参数,例如构造矩阵中,
> matrix(1:6,ncol<-3)
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
> matrix(1:6,ncol=3)
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
事实上第一条命令等价于 matrix(1:6,3) , 因为在默认的参数排序中nrow排在ncol之前,从而将数字3赋值给了nrow.
(3)除函数内参数赋值外,能用"="等地方一定能用"<-",但反过来则不一定,譬如 system.time(A<-matrix(1:6,3))不能替换为等号。
当然除了上述两种赋值方式外,还有一种赋值方式"<<-"也偶尔在R编程运用到,表示给上一层环境中的变量赋值
#1
出于对某种赋值方式的偏好,也逐渐出现了等号党和箭头党,但到底孰好孰坏,显然争不出任何结果,相对来说更重要的倒是了解这两者的区别。在大部分情况下,两者等价,但是需要注意以下区别:
(1) 等号只能单向赋值,例如x = 10; 箭头符号可以双向赋值,即x<-10与10->x等价
(2) 在函数中赋值(参数传递)只能使用"=", 尽管使用"<-"也不会报错,在R会忽略指定的赋值对象,转而赋值给默认顺序中该位置的参数,例如构造矩阵中,
> matrix(1:6,ncol<-3)
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
> matrix(1:6,ncol=3)
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
事实上第一条命令等价于 matrix(1:6,3) , 因为在默认的参数排序中nrow排在ncol之前,从而将数字3赋值给了nrow.
(3)除函数内参数赋值外,能用"="等地方一定能用"<-",但反过来则不一定,譬如 system.time(A<-matrix(1:6,3))不能替换为等号。
当然除了上述两种赋值方式外,还有一种赋值方式"<<-"也偶尔在R编程运用到,表示给上一层环境中的变量赋值
(1) 等号只能单向赋值,例如x = 10; 箭头符号可以双向赋值,即x<-10与10->x等价
(2) 在函数中赋值(参数传递)只能使用"=", 尽管使用"<-"也不会报错,在R会忽略指定的赋值对象,转而赋值给默认顺序中该位置的参数,例如构造矩阵中,
> matrix(1:6,ncol<-3)
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
> matrix(1:6,ncol=3)
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
事实上第一条命令等价于 matrix(1:6,3) , 因为在默认的参数排序中nrow排在ncol之前,从而将数字3赋值给了nrow.
(3)除函数内参数赋值外,能用"="等地方一定能用"<-",但反过来则不一定,譬如 system.time(A<-matrix(1:6,3))不能替换为等号。
当然除了上述两种赋值方式外,还有一种赋值方式"<<-"也偶尔在R编程运用到,表示给上一层环境中的变量赋值