For循环在R中创建新文件(但给出不正确/意外的输出)

For循环在R中创建新文件(但给出不正确/意外的输出),r,csv,R,Csv,我目前正忙于处理一些数据,我需要检查它们的有效性。 因此,我想使用for循环遍历所有数据文件。 在这个for循环中,我想计算一些东西(比如mean、min、max…) 我下面的代码可以工作,但生成了一个写不正确的csv文件。在csv文件创建过程中完成计算(及其值)后会出现问题。CSV: "c.1..1..1004.89081855716..630.174466667434..461.738905906677.." "c.1..1..950.990843858612..479.9856081495

我目前正忙于处理一些数据,我需要检查它们的有效性。 因此,我想使用for循环遍历所有数据文件。 在这个for循环中,我想计算一些东西(比如mean、min、max…)

我下面的代码可以工作,但生成了一个写不正确的csv文件。在csv文件创建过程中完成计算(及其值)后会出现问题。CSV:

"c.1..1..1004.89081855716..630.174466667434..461.738905906677.." "c.1..1..950.990843858612..479.98560814955..517.955102920532.."
1 1
1 1
1004.89081855716 950.990843858612
630.174466667434 479.98560814955
461.738905906677 517.955102920532
1535.86795806885 1452.30199813843
-13.3948961645365 3.72026950120926
1259.26423788071 1159.17089223862
方法/我期望的: 所以我从一些包含眼球跟踪数据的数据文件开始。 正如您在代码开头所看到的,我尝试从眼球跟踪数据中获取一些值(validity,仅包含validity==1数据的新文件…)。一旦我创建了过滤后的数据帧,我想从中计算一些额外的值(平均值、sd、最小值/最大值)。 我的计划是创建一个新的csv文件(validity\u loop.csv),在其中我可以找到我所有的计算结果(validity\u left,validity\u right,mean\u eye\u x,mean\u eye\u y,minu eye\u x,max\u eye\u x,minu eye\u y,max\u eye\u y)。一字排开。每个数据集一行(文件列表[i])

有人能帮我解决这个问题吗

这是我的密码:

set <- setwd("/Users/Sarah/Documents")

file_list <- list.files(set, pattern = ".csv", all.files = TRUE)
validity_list <- data_list <- vector("list", "length" = length(file_list))

for(i in seq_along(file_list)){

  filename = file_list[i]

  #read files

  data_frame = read.csv(filename, sep = ",", dec = ".", 
                        header = TRUE, 
                        stringsAsFactors = FALSE)

  #what has to be done
  #validity

  validity_left <- mean(is.numeric(data_frame$left_gaze_point_validity))
  validity_right <-mean(is.numeric(data_frame$right_gaze_point_validity))

  #Zuiver dataframe (validity ==1)

  to_keep = which(data_frame$left_gaze_point_validity == 1 &
                  data_frame$right_gaze_point_validity==1)

  filtered_data = data_frame[to_keep,]
  filtered_data$left_eye_x = as.numeric(filtered_data$left_eye_x)
  filtered_data$left_eye_y = as.numeric(filtered_data$left_eye_y)
  filtered_data$right_eye_x = as.numeric(filtered_data$right_eye_x)
  filtered_data$right_eye_y = as.numeric(filtered_data$right_eye_y)

  #1 eye-data 

  filtered_data$eye_x <- (filtered_data$left_eye_x+filtered_data$right_eye_x)/2
  filtered_data$eye_y <- (filtered_data$left_eye_y+filtered_data$right_eye_y)/2

  #Pixels 

  filtered_data$eye_x <- (filtered_data$eye_x)*1920
  filtered_data$eye_y <- (filtered_data$eye_y)*1080

  #SD and Mean + min-max

  mean_eye_x<- mean(filtered_data$eye_x)
  mean_eye_y <- mean(filtered_data$eye_y)

  sd_eye_x <- sd(filtered_data$eye_x)
  sd_eye_y <- sd(filtered_data$eye_y)

  min_eye_x <- min(filtered_data$eye_x)
  min_eye_y <- min(filtered_data$eye_y)
  max_eye_x <- max(filtered_data$eye_x)
  max_eye_y <- max(filtered_data$eye_y)

  #add everything to new file

  validity_list[[i]] <- c(validity_left, validity_right, 
                          mean_eye_x, mean_eye_y,
                          min_eye_x, min_eye_y,
                          max_eye_x, max_eye_y) 

}

#new document
write.table(validity_list, 
            file = "Master T&O/Thesis /Loop/Validity/validity_loop.csv",
            col.names = TRUE, row.names = FALSE)

set如果我得到它,那么下面的一行会将您的所有数据收集在一起:

validity_list[[i]] <- c (validity_left, validity_right,mean_eye_x,
                         mean_eye_y, min_eye_x,max_eye_x,min_eye_y,max_eye_y). 
。。。而“=”告诉解释器,它后面的所有内容都是一个元组“(”,data“)”…这使得它成为一个数据集,如果我随后编写它。。。它将在一列中结束。如果您使用for循环进行选择,我将在单独的列中写入“validity\u left”。在您的情况下,是否将此添加到下面的代码中

for item in validity_list:
         function to process item..etc.

我设法在R中获得了一个新的数据帧,它以矩阵形式包含我的validity_列表的值

#FOR LOOP poging 2 
set <- setwd("/Users/Sarah/Documents/Master T&O/Thesis /Loop")

file_list <- list.files(set, pattern = ".csv", all.files = TRUE)
validity_list <- vector("list", "length" = length(file_list))

for(i in seq_along(file_list)){
  filename = file_list[i]
  #read files
  data_frame = read.csv(filename, sep = ",", dec = ".", header = TRUE, stringsAsFactors = FALSE)
  #what has to be done
  #validity
  validity_left <- mean(is.numeric(data_frame$left_gaze_point_validity))
  validity_right <-mean(is.numeric(data_frame$right_gaze_point_validity))
  #Zuiver dataframe (validity ==1)
  to_keep = which(data_frame$left_gaze_point_validity == 1 & data_frame$right_gaze_point_validity==1)

  filtered_data = data_frame[to_keep,]
  filtered_data$left_eye_x = as.numeric(filtered_data$left_eye_x)
  filtered_data$left_eye_y = as.numeric(filtered_data$left_eye_y)
  filtered_data$right_eye_x = as.numeric(filtered_data$right_eye_x)
  filtered_data$right_eye_y = as.numeric(filtered_data$right_eye_y)
  #1 eye-data 
  filtered_data$eye_x <- (filtered_data$left_eye_x+filtered_data$right_eye_x)/2
  filtered_data$eye_y <- (filtered_data$left_eye_y+filtered_data$right_eye_y)/2
  #Pixels 
  filtered_data$eye_x <- (filtered_data$eye_x)*1920
  filtered_data$eye_y <- (filtered_data$eye_y)*1080
  #SD and Mean + min-max
  mean_eye_x<- mean(filtered_data$eye_x)
  mean_eye_y <- mean(filtered_data$eye_y)

  sd_eye_x <- sd(filtered_data$eye_x)
  sd_eye_y <- sd(filtered_data$eye_y)

  min_eye_x <- min(filtered_data$eye_x)
  min_eye_y <- min(filtered_data$eye_y)
  max_eye_x <- max(filtered_data$eye_x)
  max_eye_y <- max(filtered_data$eye_y)

  #add everything to new file
  validity_list[[i]] <- c(validity_left, validity_right,mean_eye_x, mean_eye_y, min_eye_x,max_eye_x,min_eye_y,max_eye_y)
  validity_matrix <- matrix(unlist(validity_list), ncol = 8, byrow = TRUE)
}

#new document
write.table(validity_matrix, file = "/Users/Sarah/Documents/Master T&O/Thesis /Loop/Validity/validity_loop.csv", dec = ".")
#用于循环POG 2

嗨,莎拉。。请附上您的csv文件,因为这会显示出问题所在,并有助于更轻松地解决您的问题。请完成整个旅程。。。获取发布q的好处和提示;-)<代码>有效性\u列表
是一个列表,并且
写入。表
首选矩阵或数据。框架文件如何不正确?你能用你期望的和你目前得到的来编辑你的帖子吗?我在问题中添加了一个指向csv文件的链接!我现在正在写下什么是期望,什么是不起作用!谢谢你的帮助!在前面的评论中,我设法在R(validity_matrix)中获得了一个数据帧,它看起来像我想要的。我现在唯一的问题是,我在矩阵中得到了错误的值,但这是有效性列表元素的计算代码中的一个问题。我将把我的代码作为答案放在下面!干得好,干得好!别忘了分别发布你的答案:-)
#FOR LOOP poging 2 
set <- setwd("/Users/Sarah/Documents/Master T&O/Thesis /Loop")

file_list <- list.files(set, pattern = ".csv", all.files = TRUE)
validity_list <- vector("list", "length" = length(file_list))

for(i in seq_along(file_list)){
  filename = file_list[i]
  #read files
  data_frame = read.csv(filename, sep = ",", dec = ".", header = TRUE, stringsAsFactors = FALSE)
  #what has to be done
  #validity
  validity_left <- mean(is.numeric(data_frame$left_gaze_point_validity))
  validity_right <-mean(is.numeric(data_frame$right_gaze_point_validity))
  #Zuiver dataframe (validity ==1)
  to_keep = which(data_frame$left_gaze_point_validity == 1 & data_frame$right_gaze_point_validity==1)

  filtered_data = data_frame[to_keep,]
  filtered_data$left_eye_x = as.numeric(filtered_data$left_eye_x)
  filtered_data$left_eye_y = as.numeric(filtered_data$left_eye_y)
  filtered_data$right_eye_x = as.numeric(filtered_data$right_eye_x)
  filtered_data$right_eye_y = as.numeric(filtered_data$right_eye_y)
  #1 eye-data 
  filtered_data$eye_x <- (filtered_data$left_eye_x+filtered_data$right_eye_x)/2
  filtered_data$eye_y <- (filtered_data$left_eye_y+filtered_data$right_eye_y)/2
  #Pixels 
  filtered_data$eye_x <- (filtered_data$eye_x)*1920
  filtered_data$eye_y <- (filtered_data$eye_y)*1080
  #SD and Mean + min-max
  mean_eye_x<- mean(filtered_data$eye_x)
  mean_eye_y <- mean(filtered_data$eye_y)

  sd_eye_x <- sd(filtered_data$eye_x)
  sd_eye_y <- sd(filtered_data$eye_y)

  min_eye_x <- min(filtered_data$eye_x)
  min_eye_y <- min(filtered_data$eye_y)
  max_eye_x <- max(filtered_data$eye_x)
  max_eye_y <- max(filtered_data$eye_y)

  #add everything to new file
  validity_list[[i]] <- c(validity_left, validity_right,mean_eye_x, mean_eye_y, min_eye_x,max_eye_x,min_eye_y,max_eye_y)
  validity_matrix <- matrix(unlist(validity_list), ncol = 8, byrow = TRUE)
}

#new document
write.table(validity_matrix, file = "/Users/Sarah/Documents/Master T&O/Thesis /Loop/Validity/validity_loop.csv", dec = ".")