R 循环不工作并保存输出

R 循环不工作并保存输出,r,loops,output,rstudio,R,Loops,Output,Rstudio,嗨,不知怎的,我的循环不起作用了。它只接受最后一个变量。代码如下: library(readxl) library(readr) library(plyr) library(dplyr) path = "C:/Users/benja/OneDrive/Studium/Bachelorarbeit/Ressourcen/Conference Calls/" Enterprise = "ABB Ltd" #Import Dictionary Dictionary <- read_excel

嗨,不知怎的,我的循环不起作用了。它只接受最后一个变量。代码如下:

library(readxl)
library(readr)
library(plyr)
library(dplyr)

path = "C:/Users/benja/OneDrive/Studium/Bachelorarbeit/Ressourcen/Conference Calls/"
Enterprise = "ABB Ltd"

#Import Dictionary
Dictionary <- read_excel("C:/Users/benja/OneDrive/Studium/Bachelorarbeit/Ressourcen/LoughranMcDonald_MasterDictionary_2014.xlsx", 
                     sheet = "Tabelle1")
for (File in c("2016 Q1.xml","2016 Q2.xml","2016 Q3.xml","2016 Q4.txt"))
  {

  #Import Text
  ABB_2016_Q4 <- read_delim(paste0(path,Enterprise,"/",File), 
                        " ", escape_double = FALSE, col_names = FALSE, 
                        trim_ws = TRUE)

  #Umformatierung -> Zuerst Transp, Vektor, kleinbuchstaben, dataframe
  ABB_2016_Q4 = data.frame(tolower(c(t(ABB_2016_Q4))))
  colnames(ABB_2016_Q4) = "Word"

  #Zusammenführung Text-Dictionary
  Analyze_2016_Q4 = inner_join(Dictionary,ABB_2016_Q4)

  #Analyse
  Rating = sum(Analyze_2016_Q4$Rating)

}
它有适当的列表,但循环无论如何都不起作用。如何在每次循环后保存结果?
我想有不同的四分之一显示每个评级

您的循环可能正在工作,但目前没有返回任何内容:)

例如,您可以将结果写入列表:

#initiate result list
allResults <- list()
#populate your filelist; depending on your directory, you can also use list.files()
files <- c("2016 Q1.xml","2016 Q2.xml","2016 Q3.xml","2016 Q4.txt")
#iterate through your files
for (i in (1:length(files))
  { #Import Text
    ABB_2016_Q4 <- read_delim(paste0(path,Enterprise,"/",files[i]), 
                        " ", escape_double = FALSE, col_names = FALSE, 
                        trim_ws = TRUE)

  #Umformatierung -> Zuerst Transp, Vektor, kleinbuchstaben, dataframe
  ABB_2016_Q4 = data.frame(tolower(c(t(ABB_2016_Q4))))
  colnames(ABB_2016_Q4) = "Word"

  #Zusammenführung Text-Dictionary
  Analyze_2016_Q4 = inner_join(Dictionary,ABB_2016_Q4)

  #Analyse & store results & add identifier:
  allResults[[i]] = data.frame(ID = paste0("Q",i), 
                               result =sum(Analyze_2016_Q4$Rating),
                               stringsAsFactors = FALSE)

}
 # flatten resultlist to a dataframe:
 allResultsDf <- do.call(rbind, allResults)
#启动结果列表

allResults您的循环可能正在工作,但目前没有返回任何内容:)

例如,您可以将结果写入列表:

#initiate result list
allResults <- list()
#populate your filelist; depending on your directory, you can also use list.files()
files <- c("2016 Q1.xml","2016 Q2.xml","2016 Q3.xml","2016 Q4.txt")
#iterate through your files
for (i in (1:length(files))
  { #Import Text
    ABB_2016_Q4 <- read_delim(paste0(path,Enterprise,"/",files[i]), 
                        " ", escape_double = FALSE, col_names = FALSE, 
                        trim_ws = TRUE)

  #Umformatierung -> Zuerst Transp, Vektor, kleinbuchstaben, dataframe
  ABB_2016_Q4 = data.frame(tolower(c(t(ABB_2016_Q4))))
  colnames(ABB_2016_Q4) = "Word"

  #Zusammenführung Text-Dictionary
  Analyze_2016_Q4 = inner_join(Dictionary,ABB_2016_Q4)

  #Analyse & store results & add identifier:
  allResults[[i]] = data.frame(ID = paste0("Q",i), 
                               result =sum(Analyze_2016_Q4$Rating),
                               stringsAsFactors = FALSE)

}
 # flatten resultlist to a dataframe:
 allResultsDf <- do.call(rbind, allResults)
#启动结果列表

allResults看起来您正在加载一个“主”文件,然后加载许多单独的文件并尝试将这些文件连接到主文件。如果是这样的话,我会采取更实用的方法,而不是使用
for()
循环

一些示例数据:

master <- data.frame(
  key = letters,
  stringsAsFactors = FALSE
)    

a <- data.frame(
  key = sample(letters, 13),
  dat = sample(1:100, 13),
  stringsAsFactors = FALSE
)

a$key
letters_reduced <- letters %in% a$key
letters_reduced <- letters[!letters_reduced]

b <- data.frame(
  key = sample(letters_reduced, 13),
  dat = sample(1:100, 13),
  stringsAsFactors = FALSE
)

readr::write_csv(a, "~/StackOverflow/BenjaminBerger/a.csv")
readr::write_csv(b, "~/StackOverflow/BenjaminBerger/b.csv")
现在您有了一个数据帧列表。有许多方法可以将这些数据帧连接到主对象,但最简单的方法可能是将数据帧列表“折叠”为一个数据帧,并使用此数据帧进行一次连接。这很容易做到:

df <- dplyr::bind_rows(df)
master <- dplyr::inner_join(master, df, by = "key")

看起来您正在加载一个“主”文件,然后加载许多单独的文件并尝试将这些文件连接到主文件。如果是这样的话,我会采取更实用的方法,而不是使用
for()
循环

一些示例数据:

master <- data.frame(
  key = letters,
  stringsAsFactors = FALSE
)    

a <- data.frame(
  key = sample(letters, 13),
  dat = sample(1:100, 13),
  stringsAsFactors = FALSE
)

a$key
letters_reduced <- letters %in% a$key
letters_reduced <- letters[!letters_reduced]

b <- data.frame(
  key = sample(letters_reduced, 13),
  dat = sample(1:100, 13),
  stringsAsFactors = FALSE
)

readr::write_csv(a, "~/StackOverflow/BenjaminBerger/a.csv")
readr::write_csv(b, "~/StackOverflow/BenjaminBerger/b.csv")
现在您有了一个数据帧列表。有许多方法可以将这些数据帧连接到主对象,但最简单的方法可能是将数据帧列表“折叠”为一个数据帧,并使用此数据帧进行一次连接。这很容易做到:

df <- dplyr::bind_rows(df)
master <- dplyr::inner_join(master, df, by = "key")

如果没有,很难说,但是看起来您的
for()
循环在每次迭代中都会覆盖
评级
对象。使用
for()
循环加载文件;把所有的东西都移出来我试着在里面放些例子,但是你可以想象它是纯文本文件,我把它变成一个单列向量,然后我把它和字典连接起来,对它进行“评分”。我尝试了您的解决方案,但它似乎也覆盖了数据。如果没有,很难说,但您的
for()
循环似乎在每次迭代中都覆盖
评级
对象。使用
for()
循环加载文件;把所有的东西都移出来我试着在里面放些例子,但是你可以想象它是纯文本文件,我把它变成一个单列向量,然后我把它和字典连接起来,对它进行“评分”。我尝试了你的解决方案,但它似乎也覆盖了数据。非常感谢Janna,它工作得非常好!在列表之后还有最后一个小问题:如何创建每个结果旁边有季度名称的列表?现在它是一个空的空间:4:num 3:num 3:num 1:num 9的allResults列表参见编辑:当然,这取决于您的数据文件是否始终与您的季度顺序相同。例如,如果你想要一个更安全的选择,你也可以从文件名中提取四分之一的名称。也要牢记@Phil的答案,因为这是一种处理你可能正在做的事情的更通用的方法,并且从长远来看会节省你的时间(例如,你不必硬编码所有的文件名)非常感谢Janna,它真的很好用!在列表之后还有最后一个小问题:如何创建每个结果旁边有季度名称的列表?现在它是一个空的空间:4:num 3:num 3:num 1:num 9的allResults列表参见编辑:当然,这取决于您的数据文件是否始终与您的季度顺序相同。例如,如果你想要一个更安全的选择,你也可以从文件名中提取四分之一的名称。也要牢记@Phil的答案,因为这是一种处理你可能正在做的事情的更通用的方法,并且从长远来看会节省你的时间(例如,你不必硬编码所有的文件名)非常感谢你的帮助,菲尔!Janna的代码解决了我的问题,所以我不必再尝试另一个,但非常感谢!!别担心;一定要投票/接受有用的答案或解决你的问题谢谢你的帮助菲尔!Janna的代码解决了我的问题,所以我不必再尝试另一个,但非常感谢!!别担心;一定要投票/接受有用的答案或解决你的问题