d*******1 发帖数: 854 | 1 有一个dataframe, 很多column, 想对任意一对column做scatter plot.
比如 plot(data$columnXXXXX, data$columnYYYYY)
但是每次命名column太麻烦了, 就想到用下面这个办法
plot(names(data)[2], names(data)[3]), 但是不work
又变成plot(data$names(data)[2],data$names(data)[3]). 还是不work,
有没有大侠给提个思路? |
D******n 发帖数: 2836 | 2 ft...
plot(data[,i],data[,j])
【在 d*******1 的大作中提到】 : 有一个dataframe, 很多column, 想对任意一对column做scatter plot. : 比如 plot(data$columnXXXXX, data$columnYYYYY) : 但是每次命名column太麻烦了, 就想到用下面这个办法 : plot(names(data)[2], names(data)[3]), 但是不work : 又变成plot(data$names(data)[2],data$names(data)[3]). 还是不work, : 有没有大侠给提个思路?
|
d*******1 发帖数: 854 | 3 看到你的答案我也FT了, HEHE. 那么names(data)[1]到底给出了什么呢? 我这个IDEA
是从你的那个RESHAPE(VARYING=NAMES(DATA)[2].....)来的, 呵呵
【在 D******n 的大作中提到】 : ft... : plot(data[,i],data[,j])
|
c*****m 发帖数: 4817 | 4 你第一次用R??
names(data)返回的是一个vector,默认是column的names。
name(data)[1]自然就是这个vector的第一个元素,也就是第一个变量的名字
IDEA
【在 d*******1 的大作中提到】 : 看到你的答案我也FT了, HEHE. 那么names(data)[1]到底给出了什么呢? 我这个IDEA : 是从你的那个RESHAPE(VARYING=NAMES(DATA)[2].....)来的, 呵呵
|
L**********A 发帖数: 7115 | 5 names(data)[1] 给出的就是第一col的name 咯...
你自己在R 里就可以看出来啊...
2个names 当然没法plot
IDEA
【在 d*******1 的大作中提到】 : 看到你的答案我也FT了, HEHE. 那么names(data)[1]到底给出了什么呢? 我这个IDEA : 是从你的那个RESHAPE(VARYING=NAMES(DATA)[2].....)来的, 呵呵
|
D******n 发帖数: 2836 | 6 lz是不明白programming而已不是不明白R,
lz你要搞清楚的是,啥是变量名,啥是character变量,啥是character变量的值。
在多数programming language里面,compiler是不会把character变量的“值”当做变量
名的。
names(data) 给出来的是一个character vector
【在 L**********A 的大作中提到】 : names(data)[1] 给出的就是第一col的name 咯... : 你自己在R 里就可以看出来啊... : 2个names 当然没法plot : : IDEA
|
d*******1 发帖数: 854 | 7 我的思路还是在延续SAS MACRO中的文本替换的模式, 比如在SAS,
plot(&var1, &var2), 如果var1 and var2已经被赋值X和Y, 那么程序就会把这个PLOT
自动解读为 PLOT(X,Y), 所以我的思路就不自觉的认为R会将NAMES(DATA)[1] 和NAMES
(DATA)[2]解读成X, Y. 我记得R里也有这种文本替换的函数, 比如PASTE, 但是PASTE
在这里也不好使。 我自己的感觉SAS MACRO的文本替换在执行很多重复行的任务方面还
是很好的, 比如说自动产生1000个名字内容不同的CSV文件, 不知道R用什么功能控制
输出文件的名字在每次LOOP中改变。
变量
【在 D******n 的大作中提到】 : lz是不明白programming而已不是不明白R, : lz你要搞清楚的是,啥是变量名,啥是character变量,啥是character变量的值。 : 在多数programming language里面,compiler是不会把character变量的“值”当做变量 : 名的。 : names(data) 给出来的是一个character vector
|
l*********s 发帖数: 5409 | 8 SAS is old school,hehe
PLOT
NAMES
PASTE
【在 d*******1 的大作中提到】 : 我的思路还是在延续SAS MACRO中的文本替换的模式, 比如在SAS, : plot(&var1, &var2), 如果var1 and var2已经被赋值X和Y, 那么程序就会把这个PLOT : 自动解读为 PLOT(X,Y), 所以我的思路就不自觉的认为R会将NAMES(DATA)[1] 和NAMES : (DATA)[2]解读成X, Y. 我记得R里也有这种文本替换的函数, 比如PASTE, 但是PASTE : 在这里也不好使。 我自己的感觉SAS MACRO的文本替换在执行很多重复行的任务方面还 : 是很好的, 比如说自动产生1000个名字内容不同的CSV文件, 不知道R用什么功能控制 : 输出文件的名字在每次LOOP中改变。 : : 变量
|
d*******1 发帖数: 854 | 9 我觉得抛去价格因素, SAS BASE/STAT都还是很强大的,我准备还要继续用下去,毕竟
衡量一个软件是否成功longevity也是一个重要因素
【在 l*********s 的大作中提到】 : SAS is old school,hehe : : PLOT : NAMES : PASTE
|
D******n 发帖数: 2836 | 10 SAS的最大坏处就是把macro当subroutine来用了。
真正的编程语言不是这样用的。C里面也有macro,可是不会这样大量使用,而且只用在
header文件里面。
如果你没有学过正式的编程语言而且学sas,你就会误解很多东西。macro是awkward的。
在正式的编程语言里面,如果要重复执行一个东西,会用subroutein或者说function。
由于SAS是个怪胎,它没有function的功能,只能搞出来个macro,所以很多东西都跟一
般编程的思路不一样。你的说功能很好实现,如果你搞清楚我上个帖子说的那几个东西
。
filenames<-c('aaa','bbb','ccc');
for (file in filenames)
{
data<-read.table(file);
}
PLOT
NAMES
PASTE
【在 d*******1 的大作中提到】 : 我的思路还是在延续SAS MACRO中的文本替换的模式, 比如在SAS, : plot(&var1, &var2), 如果var1 and var2已经被赋值X和Y, 那么程序就会把这个PLOT : 自动解读为 PLOT(X,Y), 所以我的思路就不自觉的认为R会将NAMES(DATA)[1] 和NAMES : (DATA)[2]解读成X, Y. 我记得R里也有这种文本替换的函数, 比如PASTE, 但是PASTE : 在这里也不好使。 我自己的感觉SAS MACRO的文本替换在执行很多重复行的任务方面还 : 是很好的, 比如说自动产生1000个名字内容不同的CSV文件, 不知道R用什么功能控制 : 输出文件的名字在每次LOOP中改变。 : : 变量
|
|
|
d*******1 发帖数: 854 | 11 SAMPLE CODE 很强大, 小本本记下了。 但是不大同意你对MACRO的解读, 还记得在一
个blog里看到一个貌似牛人对MACRO的评价, 摘录如下:
On a side note. As a “real” programmer, having been an expert in Pascal
and C and having programmed in, oh I don’t want to list them all, but I
have also done more than just take classes in Java. Anyway, Macros have a
place in programming. There have been a few times I wished Java supported
macros and not just assertions, out of my own laziness. I am a firm believer
in the right tool for the job, and that not everyth
【在 D******n 的大作中提到】 : SAS的最大坏处就是把macro当subroutine来用了。 : 真正的编程语言不是这样用的。C里面也有macro,可是不会这样大量使用,而且只用在 : header文件里面。 : 如果你没有学过正式的编程语言而且学sas,你就会误解很多东西。macro是awkward的。 : 在正式的编程语言里面,如果要重复执行一个东西,会用subroutein或者说function。 : 由于SAS是个怪胎,它没有function的功能,只能搞出来个macro,所以很多东西都跟一 : 般编程的思路不一样。你的说功能很好实现,如果你搞清楚我上个帖子说的那几个东西 : 。 : filenames<-c('aaa','bbb','ccc'); : for (file in filenames)
|
d*******1 发帖数: 854 | 12 而且MACRO和FUNCTION本质差别到底在那里呢, 你的这个例子, 不也是“FILE"这个
WORD去重复的替换aaa, bbb, ccc吗?如果SAS就会是这个样子:
%let filename=aaa#bbb#ccc;
%do i=1 %to 3;
%let file=%scan(&filename,&i,#);
proc export data=&file.............
.....................
%end;
这个和你的R CODE思路很像啊
的。
跟一
【在 D******n 的大作中提到】 : SAS的最大坏处就是把macro当subroutine来用了。 : 真正的编程语言不是这样用的。C里面也有macro,可是不会这样大量使用,而且只用在 : header文件里面。 : 如果你没有学过正式的编程语言而且学sas,你就会误解很多东西。macro是awkward的。 : 在正式的编程语言里面,如果要重复执行一个东西,会用subroutein或者说function。 : 由于SAS是个怪胎,它没有function的功能,只能搞出来个macro,所以很多东西都跟一 : 般编程的思路不一样。你的说功能很好实现,如果你搞清楚我上个帖子说的那几个东西 : 。 : filenames<-c('aaa','bbb','ccc'); : for (file in filenames)
|
D******n 发帖数: 2836 | 13 我真是无语了。。。。
believer
need
abused
【在 d*******1 的大作中提到】 : SAMPLE CODE 很强大, 小本本记下了。 但是不大同意你对MACRO的解读, 还记得在一 : 个blog里看到一个貌似牛人对MACRO的评价, 摘录如下: : On a side note. As a “real” programmer, having been an expert in Pascal : and C and having programmed in, oh I don’t want to list them all, but I : have also done more than just take classes in Java. Anyway, Macros have a : place in programming. There have been a few times I wished Java supported : macros and not just assertions, out of my own laziness. I am a firm believer : in the right tool for the job, and that not everyth
|
d*******1 发帖数: 854 | 14 言过了把, 说说你的看法嘛
【在 D******n 的大作中提到】 : 我真是无语了。。。。 : : believer : need : abused
|
D******n 发帖数: 2836 | 15 macro的本质是替换。
function的本质是抽象。
【在 d*******1 的大作中提到】 : 而且MACRO和FUNCTION本质差别到底在那里呢, 你的这个例子, 不也是“FILE"这个 : WORD去重复的替换aaa, bbb, ccc吗?如果SAS就会是这个样子: : %let filename=aaa#bbb#ccc; : %do i=1 %to 3; : %let file=%scan(&filename,&i,#); : proc export data=&file............. : ..................... : %end; : 这个和你的R CODE思路很像啊 :
|
D******n 发帖数: 2836 | 16 你没学过正式编程语言,很难跟你说清楚啊。
学完SAS去理解R真是够呛。
【在 d*******1 的大作中提到】 : 言过了把, 说说你的看法嘛
|
d*******1 发帖数: 854 | 17 这个解释够抽象, 呵呵
【在 D******n 的大作中提到】 : macro的本质是替换。 : function的本质是抽象。
|
d*******1 发帖数: 854 | 18 说不说在你, 明不明白在我嘛, 呵呵,毕竟像牛人请教的机会也不多啊
【在 D******n 的大作中提到】 : 你没学过正式编程语言,很难跟你说清楚啊。 : 学完SAS去理解R真是够呛。
|
D******n 发帖数: 2836 | 19 如果我没有理解错,macro只是编译时候替换,所以有loop的话,譬如100个循环,其实
就是在编译时候动态生成了100X的code,然后再执行。
function是抽象的,编译好之后,就只有1X那么多的code,只是在执行的时候cpu,动态
运行那个code,100次
【在 D******n 的大作中提到】 : macro的本质是替换。 : function的本质是抽象。
|
d*******1 发帖数: 854 | 20 对, 其实说MACRO是文本替换不大准确, 应该是script generator。
动态
【在 D******n 的大作中提到】 : 如果我没有理解错,macro只是编译时候替换,所以有loop的话,譬如100个循环,其实 : 就是在编译时候动态生成了100X的code,然后再执行。 : function是抽象的,编译好之后,就只有1X那么多的code,只是在执行的时候cpu,动态 : 运行那个code,100次
|
|
|
D******n 发帖数: 2836 | 21 。。。。。。这个script generate的方式就是替换啊。。。。fts。
【在 d*******1 的大作中提到】 : 对, 其实说MACRO是文本替换不大准确, 应该是script generator。 : : 动态
|
d*******1 发帖数: 854 | 22 你这就有点defensive了, 呵呵, 对了, 你的SAS好像也挺好, 是不是捏着鼻子学的
【在 D******n 的大作中提到】 : 。。。。。。这个script generate的方式就是替换啊。。。。fts。
|
D******n 发帖数: 2836 | 23 ....哎,我不是跟你争,我是怕你理解错了。一片好心。
凡是先正式学过编程的人学sas都会很痛苦的。当然虽然sas很ugly,可是毕竟那么多年
了,修修补补,只要你用熟了也不会不太方便。只是单纯从易学性跟逻辑性来说,R比S
AS强多了。
【在 d*******1 的大作中提到】 : 你这就有点defensive了, 呵呵, 对了, 你的SAS好像也挺好, 是不是捏着鼻子学的
|
d*******1 发帖数: 854 | 24 这个我同意,我这样没基础的可能学SAS还容易些。 不过我觉的R还是容易理解的, 我
的问题在于实践太少了, 所以会闹一些笑话, 呵呵
比S
【在 D******n 的大作中提到】 : ....哎,我不是跟你争,我是怕你理解错了。一片好心。 : 凡是先正式学过编程的人学sas都会很痛苦的。当然虽然sas很ugly,可是毕竟那么多年 : 了,修修补补,只要你用熟了也不会不太方便。只是单纯从易学性跟逻辑性来说,R比S : AS强多了。
|
B******5 发帖数: 4676 | 25 非常有同感,我觉得SAS对我来说非常难以理解,所以干脆放弃了。。。
比S
【在 D******n 的大作中提到】 : ....哎,我不是跟你争,我是怕你理解错了。一片好心。 : 凡是先正式学过编程的人学sas都会很痛苦的。当然虽然sas很ugly,可是毕竟那么多年 : 了,修修补补,只要你用熟了也不会不太方便。只是单纯从易学性跟逻辑性来说,R比S : AS强多了。
|
s**********0 发帖数: 41 | 26 R里面用get(name[i])就可以调出名为name[i]的变量,跟SAS里的&name差不多了
。 |