2017-09-13 5 views
0

で複数のリストを超えるループ我々は...これを行うことができますPythonでベースR

numbers = [1, 2, 3] 
characters = ['foo', 'bar', 'baz'] 

for item in zip(numbers, characters): 
    print(item[0], item[1]) 

(1, 'foo') 
(2, 'bar') 
(3, 'baz') 

我々はまた、インデックスを使用するのではなく、タプルを解凍することができます。

for num, char in zip(numbers, characters): 
    print(num, char) 

(1, 'foo') 
(2, 'bar') 
(3, 'baz') 

ベースRを使用して同じことを行うにはどうすればよいですか?

+0

可能な重複(https://stackoverflow.com/questions/7799591/creating-tuples-from-two-vectors) – Gonzo

答えて

2

Rのネイティブな方法でこれを行うには、データフレームという概念を使用します。データフレームには、異なるタイプの複数の変数があり、各行は各変数の観測値です。

d <- data.frame(numbers = c(1, 2, 3), 
       characters = c('foo', 'bar', 'baz')) 
d 
## numbers characters 
## 1  1  foo 
## 2  2  bar 
## 3  3  baz 

次に、インデックス表記を空白のままにしておくと、すべての行が含まれる行列表記を使用して各行にアクセスします。

d[1,] 
## numbers characters 
## 1  1  foo 

あなたは、あなたがやりたいものは何でもするために、データフレームの列をループは、おそらくあなたは、実際に印刷するより面白い何かをしたいことができます。別のオプションについては

for(i in seq_len(nrow(d))) { 
    print(d[i,]) 
} 
## numbers characters 
## 1  1  foo 
## numbers characters 
## 2  2  bar 
## numbers characters 
## 3  3  baz 
+0

ドライブバイないとdownvotingコメント?クールではありません。影から出て、答えを改善するのに役立ちます! – Aaron

2

ベクトルの変数がxのRのベクトルをx [1]にするには、これは、ベクトルの最初の要素を返します。この問題に関しては0

で始まり、Pythonのとは対照的に1でR要素の番号付けを開始し、それは次のようになります。Rで

x = seq(1,10) 
j = seq(11,20) 

for (i in 1:length(x)){ 

    print (c(x[i],j[i])) 
} 
2

多くの関数がベクトル化され、ループを必要としない:

numbers = c(1, 2, 3) 
characters = c('foo', 'bar', 'baz') 
myList <- list(numbers, characters) 
myDF <- data.frame(numbers,characters, stringsAsFactors = F) 

print(myList) 
print(myDF) 
2

、どの程度mapply、ジップに最も近いアナログである、私はここでR.であると考えることができ、私は新しいベクトルを作るためにc機能を使用していますが、あなたは任意の関数にあなたを使用することができますD」のように:

numbers<- c(1, 2, 3) 
characters<- c('foo', 'bar', 'baz') 
mapply(c,numbers, characters, SIMPLIFY = FALSE) 

[[1]] 
[1] "1" "foo" 

[[2]] 
[1] "2" "bar" 

[[3]] 
[1] "3" "baz" 
方法は、最も使用のものであり、あなたの出力で何をしたいかに依存しますが、他の回答には言及して、データフレームはRの中で最も自然なアプローチです

(とパンダのデータフレームおそらく中Python)。

-1

これは概念的に等価である:これは私ができる最も近い

Map(function(nu,ch){print(data.frame(nu,ch))},numbers,characters) 

:あなたが実際に地図内のすべての作業を行うと、このような何かをするだろう、ほとんどの時間けれども

for (item in Map(list,numbers,characters)){ # though most of the time you would actually do all your work inside Map 
    print(item[c(1,2)]) 
} 

# [[1]] 
# [1] 1 
# 
# [[2]] 
# [1] "a" 
# 
# [[1]] 
# [1] 2 
# 
# [[2]] 
# [1] "b" 
# 
# [[1]] 
# [1] 3 
# 
# [[2]] 
# [1] "c" 
# 
# [[1]] 
# [1] 4 
# 
# [[2]] 
# [1] "d" 
# 
# [[1]] 
# [1] 5 
# 
# [[2]] 
# [1] "e" 

クローンに到達する:

zip <- function(...){ Map(list,...)} 
print2 <- function(...){do.call(cat,c(list(...),"\n"))} 

for (item in zip(numbers,characters)){ 
    print2(item[[1]],item[[2]]) 
} 

# 1 a 
# 2 b 
# 3 c 
# 4 d 
# 5 e 

名前でアイテムを呼び出すことができる(まだind ICES):二つのベクトルからタプルを作成する]の

zip <- function(...){ 
    names <- sapply(substitute(list(...))[-1],deparse) 
    Map(function(...){setNames(list(...),names)}, ...) 
} 

for (item in zip(numbers,characters)){ 
    print2(item[["numbers"]],item[["characters"]]) 
} 
+0

野生の下降者は起立してもらえますか? –

関連する問題