Как запустить цикл, где я меняю i и k одновременно в R? - PullRequest
0 голосов
/ 30 января 2019

У меня есть два объекта:

ElectionDay <- c( "1982-11-02",
                  "1984-11-06",
                  "1986-11-04")

И

ElectionYear <- seq(from=1982, to=1986, by = 2)

Я хочу запустить цикл for, который изменяет i и k с одинаковой скоростью.Это то, что у меня есть, и я знаю, что это неправильно.

for (i in ElectionDay){
for (k in ElectionYear){
print(i); print(k)

}}

Я хочу, чтобы результат выглядел следующим образом:

1982; "1982-11-02"
1984; "1984-11-06"
1986; "1986-11-04"

Я не хочу, чтобы он возвращался назадгде он запускает все i для каждого значения k, как в обычном цикле.

Ответы [ 3 ]

0 голосов
/ 30 января 2019

Вы можете использовать cat и paste0 в цикле.

for(i in 1:3) {
  cat(paste0(ElectionYear[i], ";"), paste0('"', ElectionDay[i], '"'), "\n")
}

\n дает новую строку.

Как указывал @markus, мы можем избежатьfor Выполните цикл:

cat(paste(ElectionYear, paste0('"', ElectionDay, '"'), sep = "; "), sep = "\n")

Результат

1982; "1982-11-02" 
1984; "1984-11-06" 
1986; "1986-11-04" 
0 голосов
/ 30 января 2019

Я бы сделал это с mapply:

a <- mapply(function(i,k){
  print(i)
  print(k)
}, ElectionDay, ElectionYear)

mapply принимает векторы и вызывает функцию с каждым элементом векторов в качестве аргументов.(Назначение a просто для подавления вывода mapply)

0 голосов
/ 30 января 2019

Есть несколько способов сделать это.Но сначала вы должны указать от ... до , который хотите ввести, поэтому это будет 1:length(ElectionDay) часть.

Вы можете использовать lubridate, чтобы вставить год вашегоElectionDay объекта и затем используйте его внутри цикла.

library(lubridate)

ElectionDay <- c( "1982-11-02",
                  "1984-11-06",
                  "1986-11-04")

for (i in 1:length(ElectionDay)){
  print(paste(year(ElectionDay[i]), ";", ElectionDay[i]))
}

, который возвращает:

#[1] "1982 ; 1982-11-02"
#[1] "1984 ; 1984-11-06"
#[1] "1986 ; 1986-11-04"

Если вы хотите заключить в кавычки годы и точку с запятой, вы можете использовать cat вместо, как сказал @ jay.sf:

for (i in 1:length(ElectionDay)){
  cat(paste0(year(ElectionDay[i])), ";", paste0('"', ElectionDay[i], '"'), "\n")
}


#1982 ; "1982-11-02" 
#1984 ; "1982-11-02" 
#1986 ; "1982-11-02" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...