有没有之间的差异Array和Vector?
typeof(Array([1,2,3]))
Vector{Int64}
typeof(Vector([1,2,3]))
Vector{Int64}
Run Code Online (Sandbox Code Playgroud)
两者似乎都创造了相同的东西,但它们并不相同:
Array == Vector
false
Array === Vector
false
Run Code Online (Sandbox Code Playgroud)
那么,实际上有什么区别呢?
我创建了一个复合类型
mutable struct Person
id::Int64
end
Run Code Online (Sandbox Code Playgroud)
这很顺利,所以我想像这样扩展类型
mutable struct Person
id::Int64
contacts::Array{Int64}
end
Run Code Online (Sandbox Code Playgroud)
但有人告诉我这是一个invalid redefinition of constant Person.
如何删除类型?除了重新启动 REPL 之外还有其他方法吗?(请说是。)
这是我正在阅读的一本书中的一个例子:
volume = begin
len = 10
breadth = 20
height = 30
len * breadth * height
end
Run Code Online (Sandbox Code Playgroud)
为什么我需要复合表达式?我可以为那个或匿名函数编写volume = 10 * 20 * 30或volume = len * breadth * height编写一个函数......
为什么我使用begin和end?或可能是更好的问题:当 我使用它们,因为我想从上面这本书的例子可能不是很好。
如何Dict()从两个数组创建一个,一个带有键,一个带有值:
a = ["a", "b", "c"] # keys
b = [1,2,3] # values
Run Code Online (Sandbox Code Playgroud) 人眼可以看到没有值x满足条件
x<1 & x>2
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能让R看到这一点。我想在一个通过比较(比如说字符串)而不一定是数据的函数中使用它。假设我想编写一个函数来检查是否无论如何都能完成比较的组合,像这样
areTherePossibleValues <- function(someString){
someCode
}
areTherePossibleValues("x<1 & x>2")
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
我的意思是可以通过解释作为比较符号的子字符串等来做到这一点,但是我觉得必须有一种更好的方法。实际上,R比较函数('<','>','='等)可能是答案,对吧?
假设我们有一个 5x5 的矩阵,其中填充了 0。
myMatrix <- matrix(rep(0, 25), ncol = 5)
Run Code Online (Sandbox Code Playgroud)
现在,让我们选择 1 到 5 之间的整数三元组。
triplet <- c(1,2,3)
Run Code Online (Sandbox Code Playgroud)
对于这个三元组的所有组合,我们现在在矩阵中添加 1,使用以下函数:
addCombinationsToMatrix <- function(.matrix, .triplet){
indexesToChange <- as.matrix(expand.grid(.triplet, .triplet))
.matrix[indexesToChange] <- .matrix[indexesToChange] + 1
.matrix
}
Run Code Online (Sandbox Code Playgroud)
使用该函数,我们从
myMatrix
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 0 0
[2,] 0 0 0 0 0
[3,] 0 0 0 0 0
[4,] 0 0 0 0 0
[5,] 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
到
myMatrix <- addCombinationsToMatrix(myMatrix, triplet)
myMatrix
[,1] …Run Code Online (Sandbox Code Playgroud) 如何获取数组中的类型?
a = [1,2,3]
Run Code Online (Sandbox Code Playgroud)
我可以得到类型 a
typeof(a)
Vector{Int64}
Run Code Online (Sandbox Code Playgroud)
但我其实想要Int64。首先,我认为新手的解决方法可能是
typeof(a[1])
Int64
Run Code Online (Sandbox Code Playgroud)
但这实际上是不正确的,如下所示:
a = [1,2,3, missing]
typeof(a)
Vector{Union{Missing, Int64}}
Run Code Online (Sandbox Code Playgroud)
向量Union{Missing, Int64}的类型是,但第一个元素的类型是
typeof(a[1])
Int64
Run Code Online (Sandbox Code Playgroud)
那么,如何获得向量/数组的类型?
我有一个向量
a = Vector(1:4)
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
我想将它索引到所有元素,但要获取的第三个元素
[1, 2, 4]
Run Code Online (Sandbox Code Playgroud)
在R你可以做的a[-3]。你在做Julia什么?
(最终我想遍历所有元素并将它们中的每一个与其余元素进行比较 - 也许这是相关的。)
我正在尝试学习 Julia 并且正在阅读一本书,该书在关于复合类型的章节中显示了以下两个代码示例:
1.
type Points
x::Int64
y::Int64
z::Int64
end
Run Code Online (Sandbox Code Playgroud)
2.
struct Point
x::Int
y::Int
z::Int
end
Run Code Online (Sandbox Code Playgroud)
然而,这本书没有解释何时使用struct以及何时使用type.
有什么不同?