像在python中一样在for循环R中追加值

时间:2015-08-22 12:45:21

标签: python r list for-loop

我正在尝试重现在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中追加价值?

感谢。

2 个答案:

答案 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

然后,您可以根据需要使用列表中的每个值,就像您需要的绘图一样。

希望我能帮上忙。