我正在尝试重现在R中用Python创建的以下函数。
// replaces method 'loginUser' in LoginService object
spyOn(LoginService, 'loginUser');
// ...
// pass a spy to expect
expect(LoginService.loginUser).toHaveBeenCalled();
结果
# Python
def square_area(side):
return side * side
results = []
for i in range(1, 10):
x = square_area(i)
results.append(x)
print results
我在R的尝试是:
[1, 4, 9, 16, 25, 36, 49, 64, 81]
结果
# R
square_area <- function(side) {
side * side
}
results=list()
for (i in 1:10){
x <- square_area(i)
results[i] = x
}
print(results)
我不知道这是否正确,但我需要将结果作为列表,稍后在折线图上构建。这个接缝更像是一个带有键和值的python字典。你如何简单地在R中追加价值?
感谢。
答案 0 :(得分:0)
我们可以通过^
vector
直接获取此信息
(1:10)^2
#[1] 1 4 9 16 25 36 49 64 81 100
如果您需要list
,请使用as.list
as.list((1:10)^2)
答案 1 :(得分:0)
Python中的列表与R中的向量完全相同是错误的。
就像矩阵一样,列表可以保存许多不同类型的值,向量不能保存。
在Python中,您可以执行以下列表:
[1, [2, 3.333], "I'm a string bitch!", [1, "hollymolly"]]
R中与向量无关的。您使用列表来做到这一点。这就是为什么被称为列表。
我一直在通过Web搜索与您相同的事物,似乎useRs不必像Pythonistas那样使用List,最糟糕的是useRs将对象List的含义与Vector混淆了,就好像它们等效(FALSE)。
R中的向量非常类似于Python中的np.array。这就是为什么R很酷的原因,它不需要Package即可处理矩阵。
在特定示例中可以执行的操作如下(阅读注释):
#R
Area2 <- function(side){ #This is your function
side^2
}
# The truth is that in your example, is enough to employ a vector and add stuff to it.
# That's why I will make a slightly more complex code to append shit to a list and show my point
LIST = list()
for(i in 1:2){
vect = c()
for(j in 1:10){
vect = c(vect, i * Area2(j))
}
LIST[[i]] = vect #This is the climax of the whole story (how to append to a List)
}
print(LIST)
结果:
[[1]]
[1] 1 4 9 16 25 36 49 64 81 100
[[2]]
[1] 2 8 18 32 50 72 98 128 162 200
然后,您可以根据需要使用列表中的每个值,就像您需要的绘图一样。
希望我能帮上忙。