我想生成一系列向量,如india_a,india_b,india_c。这些向量的长度为3.例如,当yrs = 1且crs = a时,india_a中的第一个条目将是&total;' total'的总和。
for (i in crimes){ assign(paste("india_",i,sep=""),rep(NA,12))
for (j in 1:12){
india_i[j] <-sum(juvenile_crime$total[
juvenile_crime$year==years[j]&juvenile_crime$crime==crimes[i]]) } }
这是我在代码
上面运行时收到的消息Error in india_i[j] <- sum(juvenile_crime$total[juvenile_crime$year == :
object 'india_i' not found
这个例子可能会有所帮助:
sts <- c(rep("s1",9),rep("s2",9))
yrs <- c(1,1,1,2,2,2,3,3,3,1,1,1,2,2,2,3,3,3)
crs <- c("a","b","c","a","b","c","a","b","c")
total <- c(1:18)
cri <- data.frame(sts,yrs,crs,total)
attach(cri)
yr <- levels(cri$yrs)
cr <- levels(cri$crs)
for (i in crs){
assign(paste("india_",i,sep=""),rep(NA,3))
for (j in 1:3){
india_i[j] <-sum(total[yrs==yr[j]&crs==cr[i]]
}
}
答案 0 :(得分:1)
没有名称为“india_i”的对象。我们没有关于“犯罪”载体中的内容的任何信息,但如果它是数字1:12,那么对象的名称就像“india_1”。您应该学会制作命名列表,而不是使用单独的对象。
编辑完成后,我们可以使用稍微修改过的代码版本来演示这一点(并为dataLabels.setFormatter("'' + this.point.name + ': ' + this.percentage.toFixed(2) + '%'");
添加缺少的括号 - 调用)。
sum
你得到全零的原因是India_L <- list() # create an (empty) master list
for (i in crs){
assign(paste("india_",i,sep=""),rep(NA,3))
for (j in 1:3){
India_L[[paste("india_",j,sep="")]] <-sum(total[yrs==yr[j]&crs==cr[i]])
}
}
India_L # print to see the structure
#---- result
$india_1
[1] 0
$india_2
[1] 0
$india_3
[1] 0
- 对象的yrs列没有级别。这是“数字”,只有“因素” - 类在R中有级别。对您的策略发表评论。我不确定你为自己设定的目标(除此之外)让cri
功能成功。这些逻辑测试的assign
似乎没有特别丰富的信息。也许您打算使用sum
运算符。将%in%
与向量结合使用通常不会提供信息。
使用==
通常是非常不明智的。注意你得到的警告:
attach
因此可以使用编辑更改命名的对象:
> attach(cri)
The following objects are masked _by_ .GlobalEnv:
crs, sts, total, yrs
The following objects are masked from cri (pos = 3):
crs, sts, total, yrs
您认为哪个对象被改变了?如果您然后 sts <- c(rep("s1.a",9),rep("s2.a",9))
- 编辑detach
- 数据框,您认为编辑将驻留在哪里?附加对象的一个大问题是用户对实际更改内容感到困惑。
更清楚的是,在一次传递中使用数据框创建值,然后处理数据帧的组件:
cri
答案 1 :(得分:-1)
如果你想创建3个向量,你可以这样做:
for (i in unique(crs)){
# Note: only one of each value
vect <- numeric(3)
# create a help vector
for (j in 1:3) {
vect[j] <-sum(total[yrs==yr[j] & crs==cr[i]])
}
assign(paste("india_",i,sep=""), vect)
# assign this vector to "india_i"
}
但是,这个程序不起作用。由于yrs
是数字,它将按原样包含在cri
数据框中,并且没有任何级别,因此yrs==yr[j]
永远不会为真。
另一点:通常最好使用列表而不是india_i的赋值。我会做的
india <- vector("list", 3)
names(india) <- letters[1:3]
以后的作业就像
india[[i]] <- vect
请!!!确保您的代码运行(除了您正在努力解决的错误。)目前它甚至没有加载,因为india_i[j] <-sum(total[yrs==yr[j]&crs==cr[i]]
中没有括号。