对R仍然比较新。尝试在循环中使用动态变量,但遇到各种问题。最初的代码看起来是这样的(但更大)循环中的R变量名,get等
data.train$Pclass_F <- as.factor(data.train$Pclass)
data.test$Pclass_F <- as.factor(data.test$Pclass)
,我正在努力建设成一个圈,想象这样的事情
datalist <- c("data.train", "data.test")
for (i in datalist){
i$Pclass_F <- as.factor(i$Pclass)
}
不工作。一些研究表明,为了将字符串datalist
转换为变量,我需要使用get
函数。所以我的下一次尝试是
datalist <- c("data.train", "data.test")
for (i in datalist){
get(i$Pclass_F) <- as.factor(get(i$Pclass))
}
哪些仍然不工作Error in i$Pclass : $ operator is invalid for atomic vectors
。试过
datalist <- c("data.train", "data.test")
for (i in datalist){
get(i)$Pclass_F <- as.factor(get(i)$Pclass)
}
哪些仍然不起作用Error in get(i)$Pclass_F <- as.factor(get(i)$Pclass) : could not find function "get<-"
。即使尝试过
datalist <- c("data.train", "data.test")
for (i in datalist){
get(i[Pclass_F]) <- as.factor(get(i[Pclass]))
}
哪个仍然不起作用Error in get(i[Pclass]) : object 'Pclass' not found
。她试图
datalist <- c("data.train", "data.test")
for (i in datalist){
get(i)[Pclass_F] <- as.factor(get(i)[Pclass])
}
仍然不起作用Error in '[.data.frame'(get(i), Pclass) : object 'Pclass' not found
现在意识到,我从未纳入的数据,所以没有人可以运行此本身,而只是表明这不是一个数据问题
> class(data.train$Pclass)
[1] "integer"
> class(data.test$Pclass)
[1] "integer"
> datalist
[1] "data.train" "data.test"
停止在'get'周围构建代码。将它从词典中删除,直到你对R更好。只要你认为“动态变量”,就停下来建立一个名单。把它们放在一个实际的列表中,并使用索引:'L < - list(data.train = data.train,data.test = data.test)'。 – joran
我同意这是可怕的编码。根本不是我第一次看到这个。我真的很想知道这些坏习惯是从哪里来的,以及他们如何为OP做出“直觉”和“自然”。我认为这是一个需要解决的问题(也是主要问题)。 –
@ColonelBeauvel我在OP上不会太难。成为初学者通常意味着只是试图找到“有效”的东西,并且了解它在过程中是否“优秀”。我发现这个特别的问题令人沮丧,因为它经常出现,但每个人的用例是如此不同,以至于写出一个能够有效地引导人们远离“获取”和“分配”的单一综合资源是非常困难的。 – joran