PHPExcel INDEX using AGGREGATE function yields to corrupted file - formula

I want to extract "topten" values, correctly handling tie cases.
I need to use the following formula:
=INDEX($A$4:$A$12,AGGREGATE(15,7,(ROW($K$4:$K$12)-ROW($K$4)+1)/($K$4:$K$12=O4),COUNTIF($O$4:O4,O4)))
If I use this formula in my code I have a corrupted file that I can read with a text editor and that shows:
Fatal error: Uncaught PHPExcel_Calculation_Exception: Consolidation Transporteur!N4 -> Formula Error: Wrong number of arguments for INDEX() function: 5 given, between 1 and 4 expected in /home/.../PHPExcel/Cell.php:293
Stack trace:
0 /home/.../PHPExcel/Worksheet.php(754): PHPExcel_Cell->getCalculatedValue()
1 /home/.../PHPExcel/Writer/Excel2007/Worksheet.php(373): PHPExcel_Worksheet->calculateColumnWidths()
2 /home/.../PHPExcel/Writer/Excel2007/Worksheet.php(80): PHPExcel_Writer_Excel2007_Worksheet->_writeCols(Object(PHPExcel_Shared_XMLWriter),
Object(PHPExcel_Worksheet))
3 /home/.../PHPExcel/Writer/Excel2007.php(304): PHPExcel_Writer_Excel2007_Worksheet->writeWorksheet(Object(PHPExcel_Worksheet),
Array, true)
4 /home/....output.php(33): PHPExcel_Writer_Excel2007->save('/tmp/phpxltmpqF...')
5 in /home/.../PHPExcel/Cell.php on line 293
If I write the formula without the leading equal sign, I can open the Excel file, insert the equal sign and the formula gives the correct result, showing that the formula is correct with a correct number of arguments
If I use a simple MATCH function instead of the AGGREGATE one, I can get the "topten" values but tie cases are not correctly handled.
I also need to keep the setPreCalculateFormulas to true.
How can I solve this formula issue?

Related

Robot framework not allowing me to break message across multiple lines

I've got the following code and it won't allow me to break my message over multiple lines. I've looked at over a dozen stack exchange questions but none of them work.
Should Be Equal As Integers ${ans} 0 msg=Failed stuff, the accepted value did not match. Expected value \n
... was between max and min, returned value is below this
It is giving me the error
Keyword 'BuiltIn.Should Be Equal As Integers' got positional argument after named arguments.
I've looked at the following links but they don't work
How I can write code in 2 lines in the Robot framework
Robot framework not allowing me to print over multiple lines
You can achieve this by using catenate:
${ans} = Convert To Integer 1
${message} = Catenate Failed stuff, the accepted value did not match. Expected value \n
... was between max and min, returned value is below this
Should Be Equal As Integers ${ans} 0 msg=${message}
Keep the error message on single line and you can Add ${\n} at the end of the string to get a newline character.
I think, you are using a kw which has positional argument it may not allow using real new line using ...
However, you can use Catenate keyword with SEPARATOR=\n as below:
${str3} = Catenate SEPARATOR=\n line1 text
... line2 text

Why does read.csv2 work just fine, yet read.csv2.sql shows an error/warning?

I am trying to read a csv file in R using read.csv2.sql, since I would like to use a SELECT query from SQL to help me filter my data, but before I can even get to my SELECT query, I discovered that simply reading my csv file using read.csv2.sql already generates a warning message.
This is my code:
investment2 <- read.csv2.sql("investmentdata.csv")
This is the warning message:
Warning message:
In result_fetch(res#ptr, n = n) :
Column 'Capital.Investment': mixed type, first seen values of type real, coercing other values of type string
However, when I use the normal read.csv2 function, there is no error. In particular, the following code works fine with no warning messages:
investment <- read.csv2("investmentdata.csv")
Next, I tried to resolve this issue by casting the Capital.Investment column to be real as follows:
investment3 <- read.csv2.sql("investmentdata.csv", "SELECT *, CAST(Capital.Investment AS real) FROM file")
However, R now generates the following error:
Error: no such column: Capital.Investment
Thus, I have two questions. Firstly, why does using read.csv2.sql generate that warning message when read.csv2 works just fine? Secondly, why does R (or SQL) not recognise my Capital.Investment column when I try to cast it as real?
Perhaps it is also worth noting that I cannot simply ignore this warning that the read.csv2.sql function is showing, because I discovered that as a consequence of this warning, it has automatically casted some of the NA rows in my Capital.Investment column to 0, which I cannot allow - the NA rows must stay as NA. I do not seem to be having this problem with the other columns of my csv file though.
As I am quite new to R, any help and explanations will be greatly appreciated :)
Edit
The coded version of what my truncated csv file looks like is as follows. In particular, the name of the column-in-question is indeed Capital.Investment.
id;targetC;year;comp_id;homeC;Industry.Activity;Capital.Investment;Estimated;Jobs.Created;Estimated.1;Project.Type;geographic distance;SIC;listed;sales;assets;cap_structure;rnd;profit;rndintensity;polcon;homeC_gdp;targetC_gdp;homeC_gdppc;targetC_gdppc
1302;AUS;2008;FR338966385;FRA;Design, Development & Testing;33.1;Yes;36;Yes;New;15.26414042;3669;Unlisted;4333088.972;4037211.732;0;NA;-1339221.733;NA;0.489032525;2.92347E+12;1.05456E+12;45413.06571;49628.11513
1311;AUS;2008;US*190521496652;USA;Research & Development;8.4;Yes;30;No;New;15.24712914;NA;Unlisted;NA;NA;NA;NA;NA;NA;0.489032525;1.47E+13;1.05456E+12;48401.42734;49628.11513
1313;AUS;2008;GB05817296;GBR;Business Services;9.7;Yes;10;Yes;New;15.31094496;7389;Unlisted;NA;87.64187374;NA;NA;NA;NA;0.489032525;2.87546E+12;1.05456E+12;46523.26545;49628.11513
1318;AUS;2008;US129687150L;USA;Business Services;1.3;Yes;225;Yes;New;15.24712914;7373;Unlisted;NA;NA;NA;NA;NA;NA;0.489032525;1.47E+13;1.05456E+12;48401.42734;49628.11513
1351;AUS;2008;GB*P0060071;GBR;Electricity;516;No;51;Yes;New;15.31094496;NA;Unlisted;NA;NA;NA;NA;NA;NA;0.489032525;2.87546E+12;1.05456E+12;46523.26545;49628.11513
9925;AUS;2008;GB00034121;GBR;Business Services;34.8;Yes;37;Yes;New;15.31094496;4412;Unlisted;NA;2079288.611;0.355157008;NA;94320.15469;NA;0.489032525;2.87546E+12;1.05456E+12;46523.26545;49628.11513
9932;AUS;2008;CA30060NC;CAN;Sales, Marketing & Support;3.2;Yes;11;Yes;New;14.88812529;1094;Listed;NA;NA;NA;NA;NA;NA;0.489032525;1.54913E+12;1.05456E+12;46596.33599;49628.11513
9935;AUS;2008;US940890210;USA;Manufacturing;771;Yes;266;Yes;New;15.24712914;2911;Listed;NA;NA;NA;NA;NA;NA;0.489032525;1.47E+13;1.05456E+12;48401.42734;49628.11513
9938;AUS;2008;US770059951;USA;Technical Support Centre;9.1;Yes;104;Yes;Co-Locati;15.24712914;3661;Listed;34922000;53340000;0.120134983;4598000;7333000;0.086201723;0.489032525;1.47E+13;1.05456E+12;48401.42734;49628.11513
9946;AUS;2008;US010562944;USA;Extraction;535.8;Yes;198;Yes;New;15.24712914;2911;Listed;NA;NA;NA;NA;NA;NA;0.489032525;1.47E+13;1.05456E+12;48401.42734;49628.11513
9955;AUS;2008;DE5030147191;DEU;Logistics, Distribution & Transportation;21.2;Yes;134;Yes;New;14.6718338;4311;Listed;93495971.01;346629334.8;0.036629492;0;2044745.934;0;0.489032525;3.75237E+12;1.05456E+12;45699.19832;49628.11513
9958;AUS;2008;US126012192L;USA;Business Services;9.7;Yes;10;Yes;New;15.24712914;8111;Unlisted;NA;NA;NA;NA;NA;NA;0.489032525;1.47E+13;1.05456E+12;48401.42734;49628.11513
9969;AUS;2008;US135409005;USA;Extraction;NA;No;538;Yes;New;15.24712914;2911;Listed;NA;NA;NA;NA;NA;NA;0.489032525;1.47E+13;1.05456E+12;48401.42734;49628.11513
9977;AUS;2008;JP000000728JPN;JPN;ICT & Internet Infrastructure;128.6;Yes;77;Yes;New;7.0333688;3571;Listed;53255396.85;38181450.16;0.190244908;2584585.523;480589.4308;0.067692176;0.489032525;5.03791E+12;1.05456E+12;39339.29757;49628.11513
9984;AUS;2008;US841547578;USA;Sales, Marketing & Support;13.6;Yes;23;Yes;New;15.24712914;2095;Listed;NA;NA;NA;NA;NA;NA;0.489032525;1.47E+13;1.05456E+12;48401.42734;49628.11513
9993;AUS;2008;US258715604L;USA;Customer Contact Centre;1.8;No;40;No;New;15.24712914;NA;Unlisted;NA;NA;NA;NA;NA;NA;0.489032525;1.47E+13;1.05456E+12;48401.42734;49628.11513
This issue was resolved in chat, to be one of two issues:
see my original answer below, this was causing an Error; when that is fixed, we see that ...
there is a warning, informing about the fact that a column (happens to be the same column) looks numeric but has a non-numeric cell somewhere within the guts of the file.
The first is resolved below, the second is just a warning.
However, because the OP is asking to convert to numeric via SQL, the NA is converted to 0, which is not good. My recommendation is to either cast([Capital.Investment] as char) as [Capital.Investment] and use R's as.numeric to convert to numeric (preserving the NA-nature), or to just read.csv2(.) the file outright and use sqldf(.) to use its SQL querying on table-like data.
Up front: add brackets or quotes around your column name.
Rationale: Capital.Investment is seen as a dot-delimited table-column or schema-table or something similarly not what you intend. I believe in general in SQL that field names with embedded dots need this escaping. If your data has an embedded space, realize that R does not like spaces in its field names, so it is by-default using make.names when reading it in (which replaces spaces with dots).
Setup:
Save the following as "quux.csv". (I've named it csv, but since I'm changing it to be ;-delimited, it behaves the same.)
quux;Capital.Investment
1;100
2;200
(Or you can use Capital Investment, it's the same thing.)
sqldf::read.csv2.sql("quux.csv", sql='select quux, cast(Capital.Investment as real) from file')
# Error: no such column: Capital.Investment
sqldf::read.csv2.sql("quux.csv", sql='select quux, cast([Capital.Investment] as real) as CI from file')
# quux CI
# 1 1 100
# 2 2 200
sqldf::read.csv2.sql("quux.csv", sql='select quux, cast("Capital.Investment" as real) as CI from file')
# quux CI
# 1 1 100
# 2 2 200

Error: Result 1 must be a single string, not a character vector of length 0 when using "make_choose_all_table" from tidyREDCap

I am receiving an error when using make_choose_all_table() from the tidyREDCap package and I'm hoping someone can help me understand what it means. When I export my data from REDCap using REDCapR and then run the code make_choose_all_table() the error below it pops up. The "boo_do_co_no" is my checkbox variable that I am trying to make a table with.
What does the error mean and how do I fix it?
library(REDCapR)
data <- redcap_read()
library(tidyREDCap)
make_choose_all_table(data, "boo_do_co_no")
Error: Result 1 must be a single string, not a character vector of length 0
It needs to come out like the picture below
I am guessing that you are missing an argument within data <- redcap_read() When I run that line, data contains the function code for redcap_read(), not any data output that might come from the function when all the arguments are specified.
See ?redcap_read()

Error occured while using fread function in R

I am trying to read a csv file with delimited with | using fread() in R.But i am getting bellow error.
I am using query like :-
fread("\\Path\\file_name.csv",sep="|")
Expecting 23 cols, but line 3747410 contains text after processing all cols. It is very likely that this is due to one or more fields having embedded sep='|' and/or (unescaped) '\n' characters within unbalanced unescaped quotes. fread cannot handle such ambiguous cases and those lines may not have been read in as expected. Please read the section on quotes in ?fread.
In addition: Warning message:
In fread("Path\\File_name.csv",sep="|") :
Bumped column 5 to type character on data row 3422329, field contains 'NULL'. Coercing previously read values in this column from logical, integer or numeric back to character which may not be lossless; e.g., if '00' and '000' occurred before they will now be just '0', and there may be inconsistencies with treatment of ',,' and ',NA,' too (if they occurred in this column before the bump). If this matters please rerun and set 'colClasses' to 'character' for this column. Please note that column type detection uses the first 5 rows, the middle 5 rows and the last 5 rows, so hopefully this message should be very rare. If reporting to datatable-help, please rerun and include the output from verbose=TRUE.
Help me for solving this issue...Thanks in advance.

XLConnect interpreting a a user generated function as a name that is cant find

i am running in R XLConnect and want to invoke a user made formula and not a native XL formula.
form=paste('"gdp.q_n"','"2006"','"2014"',0,'"Quarterly"',sep=",")
form=paste("FAMEDate(",form,")",sep="")
setCellFormula(object=wb,sheet=sht,row=2,col=2,formula=form)
>Error: FormulaParseException (Java): Name 'FAMEData' is completely
unknown in the current workbook
If i write it in the workbook and call it in getCellFormula then it returns the same formula in the object form but with a prefix of "!", i.e.
paste("!",form)
when i try to put that in the setCellFormula it returns a different error
>Error: FormulaParseException (Java): Parse error near char 0 '!'
in specified formula. Expected cell ref or constant literal
Any suggestions?
Have you perhaps misplace the second quote mark?
form=paste("FAMEDate(",form,")",sep="")
form=paste("FAMEDate", form, etc.

Resources