维基百科指出R是"多范式:数组,面向对象,命令式,功能性,程序性,反思性和动态性.但是它的类型安全性如何?请用例子解释R中不同方面/种类的可能类型安全性,例如
这些问题来自维基百科(http://en.wikipedia.org/wiki/Strong_typing),因为强/弱类型太过模糊而无法提出要求(感谢delnan的澄清).
zch*_*zch 10
> a = TRUE
> a
[1] TRUE
> a[3] = 1
> a
[1] 1 NA 1
> a[5] = 3.14
> a
[1] 1.00 NA 1.00 NA 3.14
> a = "Ala"
> a
[1] "Ala"
Run Code Online (Sandbox Code Playgroud)
你可以看到它是动态的 - 我可以为变量分配任何东西a并随意改变它.它也是弱类型 执行隐式转换 - 看看我如何添加整数然后浮动到最初的布尔"向量".您通常可以将布尔值视为数字和数字,就好像它们是字符串一样.
运算符和函数的隐含强制在语言中很普遍(并且它具有参数回收).警告大部分时间用于回收,但不用于强制.
a <- c(TRUE, FALSE)
b <- c(-4:4)
a < b
#[1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE
#Warning message:
#In a < b : longer object length is not a multiple of shorter object length
c(a,b)
# [1] 1 0 -4 -3 -2 -1 0 1 2 3 4
a + b
[1] -3 -3 -1 -1 1 1 3 3 5
# Standard Warning message re: multiple of shorter object length
> data.frame( a =a, b=b)
Error in data.frame(a = a, b = b) :
arguments imply differing number of rows: 2, 9
Run Code Online (Sandbox Code Playgroud)
但是如果参数的data.frame长度是具有最长长度的向量的偶数倍,则它们会在没有警告的情况下被回收:
> data.frame( a =c(TRUE,FALSE,TRUE), b=b)
a b
1 TRUE -4
2 FALSE -3
3 TRUE -2
4 TRUE -1
5 FALSE 0
6 TRUE 1
7 TRUE 2
8 FALSE 3
9 TRUE 4
Run Code Online (Sandbox Code Playgroud)
函数通过两个类系统变成多态的,其中一个系统依赖于信号通知目标类的周期字符,另一个系统依赖于对象类签名.(并且函数命名约定非常不稳定.)
我不同意R作为面向对象语言的前提.来到R的具有面向对象体验的人期望与其展示的行为不同.它是一种用类系统调度的函数式语言,它检查给定的对象,但它不像真正的面向对象语言.
小智 1
R 是动态类型的。
示例:x <- "hi" (typeof(x) = 字符); x <- 1(typeof(x) = 双精度)
关于类型安全:x <- 1;y <-“a”
x + y:x + y 中的错误:二元运算符的非数字参数
然而,paste(x,y)(这是一个串联)可以工作:“1 a”
| 归档时间: |
|
| 查看次数: |
3025 次 |
| 最近记录: |