[R] simple question on data frames assignment

Michael Artz michaeleartz at gmail.com
Thu Apr 7 17:29:30 CEST 2016


It all makes so much sense now

On Thu, Apr 7, 2016 at 10:04 AM, Jeff Newmiller <jdnewmil at dcn.davis.ca.us>
wrote:

> lapply(colordata2[ -1 ], f )
>
> When you put the parentheses on, you are calling the function yourself
> before lapply gets a chance. The error pops up because you are giving a
> vector of numbers (the answer f gave you) to the second argument of lapply
> instead of a function.
> --
> Sent from my phone. Please excuse my brevity.
>
> On April 7, 2016 7:31:18 AM PDT, Michael Artz <michaeleartz at gmail.com>
> wrote:
>>
>> If you are not using an anonymous function and say you had written the
>> function out
>>
>> The below gives me the error > 'f(colordata2$color1)' is not a function,
>> character or symbol'  But then how is the anonymous function working?
>>
>>
>> f <- function(col){
>>   ifelse(col == 'blue', 1, 0)
>> }
>> responses <- lapply(colordata2[ -1 ], f(colordata2$color1) )
>>
>> 'f(colordata2$color1)' is not a function, character or symbol'
>>
>> then how could you then use this fuction in lapply if not for the
>> anonymous function?
>>
>> On Thu, Apr 7, 2016 at 8:17 AM, Jeff Newmiller <jdnewmil at dcn.davis.ca.us>
>> wrote:
>>
>>> Lapply is not a vectorized function. It is compact to read, but it would
>>> not be worth using for this calculation.
>>>
>>> However, if your data frame had multiple color columns in your data
>>> frame that you wanted to make responses for then you might want to use
>>> lapply as a more compact version of a for loop to repeat this operation.
>>>
>>> colordata2 <- data.frame(id = c(1,2,3,4,5), color1 = c("blue", "red",
>>> "green", "blue", "orange"), color2 = c("orange", "green",
>>> "blue", "red", "red"))
>>> responses <- lapply( colordata2[ -1 ], function(col) { ifelse(col ==
>>> 'blue', 1, 0) } )
>>> names(responses) <- names( colordata2 )[-1]
>>>
>>> where each of the columns other than the first is handed in turn to the
>>> anonymous function that does the response calculation. The result is a data
>>> frame (list of columns) with no column names, so I give the new columns
>>> names based on the old column names. You could choose different names, e.g.
>>>
>>> names(responses) <- paste0( "response", 1:2 )
>>>
>>> but you have to be careful to fix that code whenever you change the
>>> colordata2 data frame to have more columns.
>>> --
>>> Sent from my phone. Please excuse my brevity.
>>>
>>> On April 7, 2016 4:57:04 AM PDT, Michael Artz <michaeleartz at gmail.com>
>>> wrote:
>>>>
>>>> Thaks so much!  And how would you incorporate lapply() here?
>>>>
>>>> On Thu, Apr 7, 2016 at 6:52 AM, David Barron <dnbarron at gmail.com> wrote:
>>>>
>>>>  ifelse is vectorised, so just use that without the loop.
>>>>>
>>>>>  colordata$response <- ifelse(colordata$color == 'blue', 1, 0)
>>>>>
>>>>>  David
>>>>>
>>>>>  On 7 April 2016 at 12:41, Michael Artz <michaeleartz at gmail.com> wrote:
>>>>>
>>>>>  Hi I'm not sure how to ask this, but its a very easy question to answer
>>>>>>  for
>>>>>>  an R person.
>>>>>>
>>>>>>  What is an easy way to check for a column value and
>>>>>> then assigne a new
>>>>>>  column a value based on that old column value?
>>>>>>
>>>>>>  For example, Im doing
>>>>>>   colordata <- data.frame(id = c(1,2,3,4,5),
>>>>>> color = c("blue", "red",
>>>>>>  "green", "blue", "orange"))
>>>>>>   for (i in 1:nrow(colordata)){
>>>>>>     colordata$response[i] <- ifelse(colordata[i,"color"] == "blue", 1, 0)
>>>>>>   }
>>>>>>
>>>>>>  which works,  but I don't want to use the for loop I want to "vecotrize"
>>>>>>  this.  How would this be implemented?
>>>>>>
>>>>>>          [[alternative HTML version deleted]]
>>>>>>
>>>>>> ------------------------------
>>>>>>
>>>>>>  R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>>>>>  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.
>>>>>
>>>>>
>>>>>
>>>>
>>>>  [[alternative HTML version deleted]]
>>>>
>>>> ------------------------------
>>>>
>>>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>>> 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.
>>>>
>>>>
>>

	[[alternative HTML version deleted]]



More information about the R-help mailing list