Joseph Sorell
2011-Aug-14 04:34 UTC
[R] Using get() or similar function to access more than one element in a vector
Dear R-users, I've written a script that produces a frequency table for a group of texts. The table has a total frequency for each word type and individual frequency counts for each of the files. (I have not included the code for creating the column headers.) Below is a sample: Word Total 01.txt 02.txt 03.txt 04.txt 05.txt the 22442 2667 3651 1579 2132 3097 I 18377 3407 454 824 449 3746 and 15521 2377 2174 891 1006 2450 to 13598 1716 1395 905 1021 1983 of 12834 1647 1557 941 1127 1887 it 12440 2160 916 497 493 2449 you 12036 2283 356 293 106 2435 I've encountered two problems when I try to construct and save the file. The "combined.sorted.freq.list" is a named integer vector in which the integers are the total frequency counts for each word. The names are the words. For each of the individual lists I've created frequency lists that are sorted in the order of the combined list. (NAs have been replaced with "0"). These are called "combined." plus the number of the file. If I were to write the line to save the file manually, it would look like this: combined.table<-paste(names(combined.sorted.freq.list), combined.sorted.freq.list, combined.01, combined.02, combined.03, combined.04, combined.05, combined.06, combined.07, combined.08, combined.09, combined.10, combined.11, combined.12, sep="\t") #creates a table with columns for the combined and all of the component lists However, each time I run the script, there may be a differing number of text files. I created a list of the individual frequency counts called "combined.file.list" combined.file.count<-1:length(selected.files) #counts number of files originally selected combined.file.list<-paste("combined", combined.file.count, sep=".") #creates the file names for the combined lists by catenating "combined" with each file number separated by a period by recycled the string "combined for each number I then tried to include it as one of the elements to be pasted by using get(). combined.table<-paste(names(combined.sorted.freq.list), combined.sorted.freq.list, get(combined.file.list[]), sep="\t") #intended to create a table with columns for the combined and all of the component lists Unfortunately, the get() function only gets the first component list since get() can apparently only access one object. This results in a table with only the total frequency and the amount of the first text: Word Total 01.txt the 22442 2667 I 18377 3407 and 15521 2377 to 13598 1716 of 12834 1647 it 12440 2160 you 12036 2283 If I try to construct the file "piece by piece" as they are created, I get an error message that a vector of more than 1.3 Gb cannot be created. Does anyone know how I could use get() or some other method to access all of the files named in a vector? Many thank for any help you can offer! Joseph
Joshua Wiley
2011-Aug-14 05:57 UTC
[R] Using get() or similar function to access more than one element in a vector
Hi Joseph, Without a reproducible example, you probably will not get the precise code for a solution but look at ?list Rather than doing what you are doing now, put everything into a list, and then you will not need to use get() at all. You will just work with the whole list. It can take a bit to get to get used to working that way, but it is worth it. Cheers, Josh On Sat, Aug 13, 2011 at 9:34 PM, Joseph Sorell <josephsorell at gmail.com> wrote:> Dear R-users, > > I've written a script that produces a frequency table for a group of > texts. The table has a total frequency for each word type and > individual frequency counts for each of the files. (I have not > included the code for creating the column headers.) Below is a sample: > > Word ?Total ? ? 01.txt ?02.txt ?03.txt ?04.txt ?05.txt > the ? ? 22442 ? 2667 ? ?3651 ? ?1579 ? ?2132 ? ?3097 > I ? ? ? 18377 ? 3407 ? ? ?454 ? ? 824 ? ? 449 ? 3746 > and ? ? 15521 ? 2377 ? ?2174 ? ? ?891 ? 1006 ? ?2450 > to ? ? ?13598 ? 1716 ? ?1395 ? ? ?905 ? 1021 ? ?1983 > of ? ? ?12834 ? 1647 ? ?1557 ? ? ?941 ? 1127 ? ?1887 > it ? ? ?12440 ? 2160 ? ? ?916 ? ? 497 ? ? 493 ? 2449 > you ? ? 12036 ? 2283 ? ? ?356 ? ? 293 ? ? 106 ? 2435 > > I've encountered two problems when I try to construct and save the file. > > The "combined.sorted.freq.list" is a named integer vector in which the > integers are the total frequency counts for each word. The names are > the words. For each of the individual lists I've created frequency > lists that are sorted in the order of the combined list. (NAs have > been replaced with "0"). These are called "combined." plus the number > of the file. > If I were to write the line to save the file manually, it would look like this: > > combined.table<-paste(names(combined.sorted.freq.list), > combined.sorted.freq.list, combined.01, combined.02, combined.03, > combined.04, combined.05, combined.06, combined.07, combined.08, > combined.09, combined.10, combined.11, combined.12, sep="\t") > #creates a table with columns for the combined and all of the > component lists > > However, each time I run the script, there may be a differing number > of text files. I created a list of the individual frequency counts > called "combined.file.list" > > combined.file.count<-1:length(selected.files) #counts number of files > originally selected > combined.file.list<-paste("combined", combined.file.count, sep=".") > #creates the file names for the combined lists by catenating > "combined" with each file number separated by a period by recycled the > string "combined for each number > > I then tried to include it as one of the elements to be pasted by using get(). > > combined.table<-paste(names(combined.sorted.freq.list), > combined.sorted.freq.list, get(combined.file.list[]), sep="\t") > #intended to create a table with columns for the combined and all of > the component lists > > Unfortunately, the get() function only gets the first component list > since get() can apparently only access one object. > > This results in a table with only the total frequency and the amount > of the first text: > > Word ?Total ? ? 01.txt > the ? ? 22442 ? 2667 > I ? ? ? 18377 ? 3407 > and ? ? 15521 ? 2377 > to ? ? ?13598 ? 1716 > of ? ? ?12834 ? 1647 > it ? ? ?12440 ? 2160 > you ? ? 12036 ? 2283 > > If I try to construct the file "piece by piece" as they are created, I > get an error message that a vector of more than 1.3 Gb cannot be > created. Does anyone know how I could use get() or some other method > to access all of the files named in a vector? > > Many thank for any help you can offer! > > Joseph > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >-- Joshua Wiley Ph.D. Student, Health Psychology Programmer Analyst II, ATS Statistical Consulting Group University of California, Los Angeles https://joshuawiley.com/
Seemingly Similar Threads
- [Bug 12440] New: make "rsync -N" == "rsync --numeric-ids" ?
- [Bug 12036] New: Multiple --link-dest, --copy-dest, or --compare-dest flags produce incorrect behavior
- Invalid Extension
- Hotplug of disk devices in LXC failed with libvirt of version 1.0.2
- Avoid dropped packets