Я разбираю csv с несколькими столбцами. Количество столбцов в CSV-файле не фиксировано. Он варьируется от 5 до 10. Мне нужно воссоздать data.frame с этими столбцами внутри функции. Мне интересно, есть ли в R какие-либо функции с несколькими аргументами, как в Ruby (* args). Если нет, то как этого добиться ??? Я немного поискал и обнаружил, что если у меня есть имя столбца как
col1
col2
Я могу использовать:
list <- ls(pat="^col\\d$")
и передать этот список в качестве аргумента функции, но он будет передавать только имена столбцов в качестве символов, а не значения, которые несут эти имена столбцов.
Какие-либо предложения????
Изменить: я разбираю файл из приложения RoR и использую гем RinRuby для вызова функций R. Итак, синтаксический анализ csv из ruby и передача содержимого отдельного столбца как одной переменной в R. Теперь в R мне нужно создать data.frame. Так что на самом деле это изначально не фрейм данных. Итак, в методе cal_norm
ниже я назначаю переменные в R, используя цикл с именами col1, col2, col3 .... и так далее.
вот код рельсов:
class UploadsController < ApplicationController
attr_accessor :calib_data, :calib_data_transpose, :inten_data, :pr_list
def index
@uploads = Upload.all
@upload = Upload.new
respond_to do |format|
format.html
format.json { render json: @uploads }
end
end
def create
@upload = Upload.new(params[:upload])
directory = "public/"
io_calib = params[:upload][:calib]
io_inten = params[:upload][:inten]
name_calib = io_calib.original_filename
name_inten = io_inten.original_filename
calib_path = File.join(directory, "calibs", name_calib)
inten_path = File.join(directory, "intens", name_inten)
respond_to do |format|
if @upload.save
@calib_data, @calib_data_transpose = import(calib_path)
@inten_data = import_ori(inten_path)
#probe list of the uploaded file
@probe_list = calib_data_transpose[0]
logger.debug @probe_list.to_s
flash[:notice] = "Files were successfully uploaded!!"
format.html
#format.js #{ render json: @upload, status: :created, location: @upload }
else
flash[:notice] = "Error in uploading!!"
format.html { render action: "index" }
format.json { render json: @upload.errors, status: :unprocessable_entity }
end
end
end
def cal_norm
#ajax request
data = params['data'].split(',')
for i in 0..@calib_data_transpose.length - 1
R.assign "col#{i}", @calib_data_transpose[i]
end
R.assign "cells", @inten_data
R.assign "pr", data
R.eval <<-EOF
# make sure to convert them in character and numeric vectors
#match the selected pr in the table
#convert the found row of values from data.frame to numeric
#divide each column of the table by the respective pr values and create a new table repat it with different pr.
#make a new table with the ce count and different probe normalization and calculate for individual pr
#finally return a data.frame with pr names and cell counts
#return individual columns as an array not in the form of matrix/data.frame
EOF
end
def import(file_path)
array = import_ori(file_path)
array_splitted = array.map {|a| a.split(",")}
array_transpose = array_splitted.transpose
return array_splitted, array_transpose
end
def import_ori(file_path)
string = IO.read(file_path)
array = string.split("\n")
array.shift
return array
end
end
read.csv
возвращает data.frame. - person Roland   schedule 14.04.2014fill
доread.csv
. Иначе ... что? - person Spacedman   schedule 14.04.2014read.csv
илиread.table
. Обе функции не заботятся о том, сколько столбцов имеет ваш csv. Возможно, вы могли бы отредактировать свой вопрос, чтобы он был немного более ясным, например, в том, что именно вы имеете в виду, воссоздавая data.frame с этими столбцами. - person Stephan Kolassa   schedule 14.04.2014cbind.data.frame
может быть полезно. Может быть, поместите их все в список и используйтеdo.call(cbind.data.frame, listOfVectors)
. - person Roland   schedule 14.04.2014