邮编或列举在R?
这些Python列表parsing的R等价物是什么:
[(i,j) for i,j in zip(index, Values)] [(i,j) for i,j in enumerate(Values)] [(i,j) for i,j in enumerate(range(10,20))] %MWE, indexing or enumerating to %keep up with the index, there may %be some parameter to look this up
输出示例
>>> [(i,j) for i,j in enumerate(range(10,20))] [(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)]
我已经用R的一些技巧解决了这个问题,但不记得了,第一个想法是itertools -pkg,但我希望find一个更习惯的做事方式。
有一些关于R的列表理解的讨论,例如在这里或那里 。 哈希包甚至提供类似字典的结构。 但是,正如其他人所说,很难尝试将一种语言设施映射到另一种语言设施上(即使这是编程语言实际提供的比较 ),而没有清楚地理解应该使用什么语言设施。 例如,我可以在R中模拟Python zip()
,如下所示:
python
In [1]: x = [1,2,3] In [2]: y = [4,5,6] In [3]: zip(x, y) Out[3]: [(1, 4), (2, 5), (3, 6)]
[R
> x <- 1:3 > y <- 4:6 > list(x, y) # gives a simple list > as.list(paste(x, y)) # three tuples, as a list of characters > mapply(list, x, y, SIMPLIFY=F) # gives a list of 3 tuples > rbind(x, y) # gives a 2x3 matrix
可以看出,这真的取决于你以后想要做什么。
回答python enumerate
:
在R中,列表是有序的(见这个答案 )。 因此,所有你需要的是索引任何键(使用names()[i]
)或值(使用[[i]]
)。
使用seq_along
(或者可以for(i in 1:length(mylist)){...}
):
> mylist <- list('a'=10,'b'=20,'c'=30) > for (i in seq_along(mylist)){ + print(paste(i,names(mylist)[i],mylist[[i]])) + } [1] "1 a 10" [1] "2 b 20" [1] "3 c 30"
回答python zip
:
看到上面的答案模仿元组列表之一。 我喜欢的是一个数据框,如BondedDust的答案所示:
> x <- 1:3 > y <- 4:6 > data.frame(x=x, y=y) xy 1 1 4 2 2 5 3 3 6
如果这是一个matrix的Python打印表示,那么这个代码:
j <- 10:20 matrix(c(seq_along(j), j), ncol=2) #------------ [,1] [,2] [1,] 1 10 [2,] 2 11 [3,] 3 12 [4,] 4 13 [5,] 5 14 [6,] 6 15 [7,] 7 16 [8,] 8 17 [9,] 9 18 [10,] 10 19 [11,] 11 20
你仍然在离开我们这些不是Python用户的人,在黑暗中关于你所期望的输出结构。 您使用术语“列表”,但输出build议一组有序的元组。
鉴于@ chi的指导,我们也可以build议使用以R为中心的“数据框架”结构
x <- 1:3 y <- 4:6 dfrm <- data.frame(x=x, y=y)
…根据列types和matrix的行列索引方式访问特征,具有列表的灵活性。 或者可以使用hhh的请求,并使用rownames
vector(默认情况下从“1”开始,但可以被改变成为以“0”开始的字符vector)创buildj-vector的隐式索引值( 10:20
dfrm <- data.frame(j=10:20) dfrm[3, ] #[1] 12 rownames(dfrm) <- 0:10 dfrm["0",] # [1] 10
不幸的是,不小心会发现,dfrm [0,]不是一个快乐的电话,返回长度为0的向量。