Unable to loop over variable names

Hi,
I am new on R (transitioning from Stata). I would like to the simplest loop ever and I somehow can't amke it work. I would like to drop three vairables from my data card using the for loop command. My code:

for(v in c("weight", "expersq", "lwage")) {
card$v<-NULL
}

but it does not work... no variables are drop from card. What am I doing wrong?

Please see the FAQ: What's a reproducible example (`reprex`) and how do I do one? Using a reprex, complete with representative data will attract quicker and more answers.

Let's use the built in dataset mtcars to illustrate an easier way to do this using the dplyr package to remove the wt, qsec and vs variables.

suppressPackageStartupMessages(library(dplyr))
head(mtcars)
#>                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
#> Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
#> Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
#> Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
#> Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
#> Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
#> Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
mtcars %>% select(-wt,-qsec,-vs) %>% head
#>                    mpg cyl disp  hp drat am gear carb
#> Mazda RX4         21.0   6  160 110 3.90  1    4    4
#> Mazda RX4 Wag     21.0   6  160 110 3.90  1    4    4
#> Datsun 710        22.8   4  108  93 3.85  1    4    1
#> Hornet 4 Drive    21.4   6  258 110 3.08  0    3    1
#> Hornet Sportabout 18.7   8  360 175 3.15  0    3    2
#> Valiant           18.1   6  225 105 2.76  0    3    1

Created on 2020-03-27 by the reprex package (v0.3.0)

Just a little syntax mistake

for(v in c("weight", "expersq", "lwage")) {
    card[[v]] <-NULL
}

Thanks. Could you explain why card$v would not work? And why card[v] actually works? What is the difference between these three syntax?

Thanks again

This topic was automatically closed 21 days after the last reply. New replies are no longer allowed.